Android中使用canvas定制控件(控件周圍陰影)


首先上一張效果圖:

基本的思路是:

1.繪制圓角矩形。

2.四周添加陰影。

 

開始繪制

在onDraw中,首先初始化畫筆:

1 Paint paint = new Paint();
2 paint.setColor(Color.WHITE);
3 paint.setShadowLayer(10f, 0, 0, IFUIConstants.BACKGROUND_COLOR_GREY);

paint.setShadowLayer中各個參數分別是:陰影半徑,陰影x坐標偏移,陰影y坐標偏移,陰影顏色。

 

再根據效果圖,計算繪制的坐標:

1 WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
2 //獲取屏幕寬度
3 float width = wm.getDefaultDisplay().getWidth() - 10;
4 //控件不含陰影部分的寬度
5 float startLeft = 5;
6 //圓角矩形起始坐標
7 float startTop = 3;

 

使用canvas的drawRoundRect進行繪制:

canvas.drawRoundRect(new RectF(startLeft, startTop, (startLeft+width), 40, 5, 5, paint);

drawRoundRect的各個參數:RectF包含一個矩形的四個單精度浮點坐標,圓角半徑x,圓角半徑y,畫筆。

這樣完成了控件的定制。

 

控件的使用

1 //在listview中使用
2 holder.btn = new MyButton(this);
3 holder.btn.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,  43));
4 //關閉硬件加速才能顯示陰影
5 holder.btn.setLayerType(View.LAYER_TYPE_SOFTWARE,null);

 

從Android 3.0開始,Android的2D渲染管線可以更好的支持硬件加速。硬件加速使用GPU進行View上的繪制操作,但是在canvas中,對文字以外的圖形設置陰影都會失效,因此在使用這個自定義控件時應該關閉硬件加速。這里僅在view級別關閉。

 

 

參考文章:

Android中的硬件加速

 

保留一切權利,轉載清注明原始地址

http://www.cnblogs.com/irrienberith/articles/3953358.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM