最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實(shí)現(xiàn)直播聊天區(qū)域中頂部的漸變效果

 更新時(shí)間:2018年04月21日 16:10:31   作者:MG屠夫  
最近在研究直播的彈幕,東西有點(diǎn)多,準(zhǔn)備記錄一下免得自己忘了又要重新研究,下面這篇文章主要給大家介紹了關(guān)于Android如何實(shí)現(xiàn)直播聊天區(qū)域中頂部漸變效果的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。

背景

在4月份開(kāi)發(fā)直播時(shí),有一個(gè)需求,需要實(shí)現(xiàn)一個(gè)RecylerView頂部漸變的效果

實(shí)際效果

解決思路

圖層重疊處理(本質(zhì)是alpha疊加出來(lái)的效果)

實(shí)現(xiàn)流程

保存一個(gè)圖層,然后畫漸變,最后再和原來(lái)的圖層進(jìn)行合并,達(dá)到這個(gè)效果。

涉及知識(shí)(不知道的請(qǐng)google):

*      主要通過(guò)RecyclerView 的 ItemDecoration類進(jìn)行解決。

*      Paint、Canvas、Shader、Xfermode(圖層融合) 

*      Gradient(漸變)

詳細(xì)過(guò)程:

圖層疊加需要通過(guò)Xfermode,Xfermode主要是讓不同圖層融合,但是有個(gè)前提,就是不同圖層需要由相同的畫筆(Paint)繪制而成。 這里就拋出了幾個(gè)問(wèn)題:

1.     如何獲取RecyclerView上每個(gè)Item的圖層?

2.     獲取到圖層,如何讓該圖層的畫筆和漸變圖層的畫筆保持一致?

3.     融合方式,參見(jiàn)Xfermode的參數(shù)?

解決方案

1.     查找資料之后,可以通過(guò)RecyclerView的ItemDecoration抽象類獲知,繪制圖層前后的事件。 onDraw:繪制Item開(kāi)始的事件回調(diào),onDrawOver:繪制Item結(jié)束的事件回調(diào)??梢酝ㄟ^(guò)Parent計(jì)算獲取相應(yīng)的Item或Canvas面板。

2.     Canvas的saveLayer方法,將當(dāng)前的Canvas存入Paint中,然后用該P(yáng)aint繪制漸變圖層,就實(shí)現(xiàn)兩個(gè)圖層相同畫筆這一條件。

3.     融合方式,采用DST_IN, 底部圖層是聊天Item,上層是漸變圖層,alpha融合之后就是聊天Item帶有漸變的效果。(腦部一下)

具體代碼:

public void doTopGradualEffect(){
  if(recyclerView == null){
   return ;
  }

  mPaint = new Paint();
  // 融合器
  final Xfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.DST_IN);
  mPaint.setXfermode(xfermode);
  // 創(chuàng)造一個(gè)顏色漸變,作為聊天區(qū)頂部效果
  linearGradient = new LinearGradient(0.0f, 0.0f, 0.0f, 100.0f, new int[]{0, Color.BLACK}, null, Shader.TileMode.CLAMP);

  recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
   // 滑動(dòng)RecyclerView,渲染之后每次都會(huì)回調(diào)這個(gè)方法,就在這里進(jìn)行融合
   @Override
   public void onDrawOver(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
    super.onDrawOver(canvas, parent, state);

    mPaint.setXfermode(xfermode);
    mPaint.setShader(linearGradient);
    canvas.drawRect(0.0f, 0.0f, parent.getRight(), 200.0f, mPaint);
    mPaint.setXfermode(null);
    canvas.restoreToCount(layerId);
   }

   @Override
   public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
    super.onDraw(c, parent, state);
    layerId = c.saveLayer(0.0f, 0.0f, (float) parent.getWidth(), (float) parent.getHeight(), mPaint, Canvas.ALL_SAVE_FLAG);
   }

   @Override
   public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    super.getItemOffsets(outRect, view, parent, state);
   }
  });
 }

Demo已經(jīng)上傳github:https://github.com/HarrisonLin/RecyclerViewEffectGather,有興趣的可以去下載。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • android在root模式下接聽(tīng)來(lái)電的方法

    android在root模式下接聽(tīng)來(lái)電的方法

    這篇文章主要介紹了android在root模式下接聽(tīng)來(lái)電的方法,需要的朋友可以參考下
    2014-03-03
  • Android 系統(tǒng)簽名 keytool-importkeypair的操作步驟

    Android 系統(tǒng)簽名 keytool-importkeypair的操作步驟

    本文介紹了在Android項(xiàng)目中使用系統(tǒng)簽名并打包APK的方法,步驟包括獲取系統(tǒng)簽名文件、修改AndroidManifest.xml、轉(zhuǎn)換簽名文件、配置Android Studio簽名、生成APK文件和打包APK,感興趣的朋友一起看看吧
    2025-01-01
  • Android畫板開(kāi)發(fā)之橡皮擦功能

    Android畫板開(kāi)發(fā)之橡皮擦功能

    這篇文章主要為大家詳細(xì)介紹了Android畫板開(kāi)發(fā)之橡皮擦功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android 超詳細(xì)講解fitsSystemWindows屬性的使用

    Android 超詳細(xì)講解fitsSystemWindows屬性的使用

    fitsSystemWindows屬性可以讓view根據(jù)系統(tǒng)窗口來(lái)調(diào)整自己的布局;簡(jiǎn)單點(diǎn)說(shuō)就是我們?cè)谠O(shè)置應(yīng)用布局時(shí)是否考慮系統(tǒng)窗口布局,這里系統(tǒng)窗口包括系統(tǒng)狀態(tài)欄、導(dǎo)航欄、輸入法等,包括一些手機(jī)系統(tǒng)帶有的底部虛擬按鍵
    2022-03-03
  • 如何安裝系統(tǒng)認(rèn)證簽名過(guò)的APK

    如何安裝系統(tǒng)認(rèn)證簽名過(guò)的APK

    如果你的App因?yàn)闄?quán)限原因需要設(shè)置 android:sharedUserId="android.uid.system" 那么IDE編譯出的包通常是無(wú)法直接安裝的,查看控制臺(tái)會(huì)發(fā)現(xiàn)報(bào) INSTALL_FAILED_SHARED_USER_INCOMPATIBLE錯(cuò)誤。這是必須的,隨隨便便一個(gè)App聲明一下就可以和系統(tǒng)用戶共享ID,豈不亂套了?
    2014-07-07
  • 分享一個(gè)Android設(shè)置圓形圖片的特別方法

    分享一個(gè)Android設(shè)置圓形圖片的特別方法

    圓形圖片想必是項(xiàng)目開(kāi)發(fā)中也是不少用的一個(gè)知識(shí)點(diǎn)吧。那么這里學(xué)習(xí)一下簡(jiǎn)單的制作圓形圖片,這個(gè)方法不用于平時(shí)的實(shí)現(xiàn)方法,有需要的可以參考借鑒。
    2016-09-09
  • Android實(shí)現(xiàn)微信搖骰子游戲

    Android實(shí)現(xiàn)微信搖骰子游戲

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)微信搖骰子游戲的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android自定義view之圍棋動(dòng)畫效果的實(shí)現(xiàn)

    Android自定義view之圍棋動(dòng)畫效果的實(shí)現(xiàn)

    這篇文章主要介紹了Android自定義view之圍棋動(dòng)畫效果的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Android應(yīng)用中使用及實(shí)現(xiàn)系統(tǒng)“分享”接口實(shí)例

    Android應(yīng)用中使用及實(shí)現(xiàn)系統(tǒng)“分享”接口實(shí)例

    為了應(yīng)用的推廣、傳播,很多的應(yīng)用中都有“分享”功能,這篇文章主要介紹了Android應(yīng)用中使用及實(shí)現(xiàn)系統(tǒng)“分享”接口實(shí)例,有興趣的可以了解一下。
    2016-12-12
  • Android編程之判斷SD卡狀態(tài)的方法

    Android編程之判斷SD卡狀態(tài)的方法

    這篇文章主要介紹了Android編程之判斷SD卡狀態(tài)的方法,結(jié)合實(shí)例分析了Android針對(duì)SD卡的權(quán)限操作及狀態(tài)判定技巧,需要的朋友可以參考下
    2016-02-02

最新評(píng)論

洛宁县| 海安县| 股票| 塔河县| 云和县| 永和县| 深泽县| 镇安县| 壤塘县| 郴州市| 江都市| 隆德县| 福贡县| 武夷山市| 资阳市| 松溪县| 太谷县| 平塘县| 长汀县| 拉萨市| 澎湖县| 霞浦县| 桑日县| 凤翔县| 高邑县| 内丘县| 安远县| 庆云县| 仁布县| 梁河县| 阿坝| 徐州市| 耒阳市| 德令哈市| 汤阴县| 铜梁县| 台东县| 平谷区| 顺昌县| 明溪县| 马尔康县|