- 自定義
SeekBar
- Android利用 canvas和Shader陰影繪制
- 源碼下載:Github ,碼云
- Github太慢乳附,所以只在碼云上持續(xù)更新
效果圖:
在這里插入圖片描述
1.關(guān)于Thumb的陰影效果的關(guān)鍵的代碼
mPaint.setColor(mThumbColor);
if (isThumbOnDragging) {
//繪制拖動中的Thumb
//繪制拖動中的陰影:陰影半徑,陰影x坐標(biāo)偏移许溅,陰影y坐標(biāo)偏移,陰影顏色
mPaint.setShadowLayer(5f, 0, 3, Color.GRAY);
canvas.drawCircle(mThumbCenterX, yTop, mThumbRadiusOnDragging, mPaint);
} else {
//繪制靜止?fàn)顟B(tài)Thumb
//繪制靜止?fàn)顟B(tài)陰影:陰影半徑贤重,陰影x坐標(biāo)偏移,陰影y坐標(biāo)偏移并蝗,陰影顏色
mPaint.setShadowLayer(5f, 0, 1, Color.GRAY);
canvas.drawCircle(mThumbCenterX, yTop, mThumbRadius, mPaint);
}
mPaint.setShadowLayer(0, 0, 0, Color.GRAY);//關(guān)閉陰影
我嘗試過用,paint.setShader(mShader);的方式滚停,但已經(jīng)過時,谷狗不推薦
2.setShadowLayer的注意事項(xiàng)
1.用完之后記得關(guān)掉陰影效果键畴,因?yàn)檫@是作為一個參數(shù),傳入Paint里面起惕,最簡單的做法就是直接把
陰影半徑
設(shè)為0,即可
3.這里我踩了一個坑惹想,記錄下,以免再犯
開始我一切寫好后嘀粱,卻一直沒有陰影效果,折騰了好久锋叨,才發(fā)現(xiàn)是
硬件加速
的問題垄分。
setShadowLayer
只有文字繪制
才支持硬件加速娃磺,其他都不支持
因此,要為此控件單獨(dú)關(guān)閉硬件加速:setLayerType(LAYER_TYPE_SOFTWARE, null)
;
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//對單獨(dú)的View在運(yùn)行時階段禁用硬件加速
setLayerType(LAYER_TYPE_SOFTWARE, null);
//...........其他省略..............
}