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

 

posted on 2014-09-03 11:58  irrienberith  阅读(7223)  评论(0编辑  收藏  举报

导航