首先上一張效果圖:
基本的思路是:
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級別關閉。
參考文章:
保留一切權利,轉載清注明原始地址
http://www.cnblogs.com/irrienberith/articles/3953358.html