【移動應(yīng)用開發(fā)技術(shù)】Android ShimmerLayout如何實現(xiàn)微光效果解析_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android ShimmerLayout如何實現(xiàn)微光效果解析_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android ShimmerLayout如何實現(xiàn)微光效果解析_第3頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】AndroidShimmerLayout如何實現(xiàn)微光效果解析

這篇文章主要介紹了AndroidShimmerLayout如何實現(xiàn)微光效果解析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓在下帶著大家一起了解一下。前陣子在github上看到一個很不錯的動畫效果,叫做ShimmerLayout,是一個用于實現(xiàn)內(nèi)部視圖微光效果的布局。如何實現(xiàn)通過使用PorterDuff,我們可以制造出微光效果。PorterDuff是canvas繪制圖像處理中的一種渲染模式,當(dāng)我們需要繪制出區(qū)域覆蓋的圖形效果的時候,我們可以使用這種方式來繪制。這里我們采用的是PorterDuff.MODE.SRC_IN,意思是在繪制的時候,顯示上下圖層相交的部分,且這部分顯示上層圖層。1)首先我們需要繪制出最上層的微光,這里通過LinearGradient線性漸變渲染器來繪制微光漸變效果,為了使得漸變自然,我們看到,代碼里在前后兩端都加入了透明色。private

Bitmap

getSourceMaskBitmap()

{

if

(sourceMaskBitmap

!=

null)

{

return

sourceMaskBitmap;

}

int

width

=

maskRect.width();

int

height

=

getHeight();

/*

通過LinearGradient在遮罩Bitmap上繪制漸變效果

*/

final

int

edgeColor

=

reduceColorAlphaValueToZero(shimmerColor);

LinearGradient

gradient

=

new

LinearGradient(

-maskRect.left,

0,

width

+

maskRect.left,

0,

/*

透明色

-

微光顏色

-

微光顏色

-

透明色

*/

new

int[]{edgeColor,

shimmerColor,

shimmerColor,

edgeColor},

new

float[]{0.25F,

0.47F,

0.53F,

0.75F},

Shader.TileMode.CLAMP);

Paint

paint

=

new

Paint();

paint.setShader(gradient);

sourceMaskBitmap

=

createBitmap(width,

height);

/*

對微光效果的bitmap做一些旋轉(zhuǎn)效果

*/

Canvas

canvas

=

new

Canvas(sourceMaskBitmap);

canvas.rotate(shimmerAngle,

width

/

2,

height

/

2);

canvas.drawRect(-maskRect.left,

maskRect.top,

width

+

maskRect.left,

maskRect.bottom,

paint);

return

sourceMaskBitmap;

}2)、然后,我們需要把微光效果的圖層和視圖本身的界面混合,使用PorterDuff.MODE.SRC_IN混合效果。首先如何繪制視圖本身的界面,這里很簡單,直接調(diào)用父類的繪制方法super.dispatchDraw(Canvas),緊接著再繪制微光效果的圖層。/*

獲取微光效果Bitmap

*/

localMaskBitmap

=

getSourceMaskBitmap();

canvas.save();

/*

先繪制GroupView本身的界面

*/

super.dispatchDraw(canvas);

/*

再繪制微光效果Bitmap

*/

canvas.drawBitmap(localMaskBitmap,

0,

0,

maskPaint);

canvas.restore();3)最后我們發(fā)現(xiàn),微光效果是從左向右移動過去的,如何實現(xiàn)?通過不斷位移localMaskBitmap的位置,這里通過控制偏移值maskOffsetX,實現(xiàn)了微光慢慢位移的效果。/*

獲取微光效果Bitmap

*/

localMaskBitmap

=

getSourceMaskBitmap();

canvas.save();

/*

canvas

裁剪顯示

*/

canvas.clipRect(maskOffsetX,

0,

maskOffsetX

+

localMaskBitmap.getWidth(),

getHeight());

/*

先繪制GroupView本身的界面

*/

super.dispatchDraw(canvas);

/*

再繪制微光效果Bitmap

*/

canvas.drawBitmap(localMaskBitmap,

maskOffset

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論