欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

背景

創(chuàng)新互聯(lián)專業(yè)做網(wǎng)站、成都做網(wǎng)站,集網(wǎng)站策劃、網(wǎng)站設(shè)計、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文推廣等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計,讓網(wǎng)站在運行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。

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

實際效果

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

解決思路

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

實現(xiàn)流程

保存一個圖層,然后畫漸變,最后再和原來的圖層進行合并,達到這個效果。

涉及知識(不知道的請google):

*      主要通過RecyclerView 的 ItemDecoration類進行解決。

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

*      Gradient(漸變)

詳細過程:

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

1.     如何獲取RecyclerView上每個Item的圖層?

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

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

解決方案

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

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

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)造一個顏色漸變,作為聊天區(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() {
   // 滑動RecyclerView,渲染之后每次都會回調(diào)這個方法,就在這里進行融合
   @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é)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。

本文標題:Android實現(xiàn)直播聊天區(qū)域中頂部的漸變效果
網(wǎng)頁地址:http://chinadenli.net/article48/jegohp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈網(wǎng)站改版、App設(shè)計、用戶體驗、商城網(wǎng)站小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)
精品精品国产欧美在线| 精品日韩中文字幕视频在线| 色婷婷在线视频免费播放| 日本加勒比中文在线观看| 久久精品国产亚洲av麻豆| 国产精品熟女在线视频| 欧美中文字幕一区在线| 亚洲午夜精品视频在线| 在线日本不卡一区二区| 在线观看视频国产你懂的| 色哟哟国产精品免费视频| 亚洲中文字幕高清视频在线观看| 亚洲天堂精品1024| 日本人妻丰满熟妇久久| 欧美精品久久一二三区| 午夜精品一区二区av| 国产超碰在线观看免费| 国产精品欧美一区两区| 国产传媒免费观看视频| 91精品蜜臀一区二区三区| 最近的中文字幕一区二区| 国产又粗又长又大的视频| 91插插插外国一区二区婷婷| 欧美日韩亚洲综合国产人| 国产免费操美女逼视频| 东京热一二三区在线免| 午夜精品一区二区三区国产| 手机在线观看亚洲中文字幕| 亚洲综合香蕉在线视频| 日本理论片午夜在线观看| 1024你懂的在线视频| 亚洲中文在线男人的天堂| 99久只有精品免费视频播放 | 欧美色婷婷综合狠狠爱| 欧美国产日韩在线综合| 国产免费成人激情视频| 亚洲一区二区三区中文久久| 色婷婷久久五月中文字幕| 亚洲综合天堂一二三区| 观看日韩精品在线视频| 黄色在线免费高清观看|