Android自定义View实现shape图形绘制
概述
之前曾写过一篇文章介绍了android中drawable使用shape资源,通过定义drawable中的shape资源能够绘制简单的图形效果,如矩形,椭圆形,线形和圆环等。后来我在项目中正好遇到这样一个需求,要在特定的位置上显示一条垂直的虚线。正当我胸有成竹的把上面的资源文件放入进去的时候,我才发现它并不能符合我的要求。使用shape画出的垂直虚线,其实就是将一条水平的线,旋转90度。但这样做的弊端就是,该view有效区域为旋转90度后与原来位置相重合的区域,还不能随意的改动,这样的效果根本没法使用。于是我就想到使用自定义view来绘制我想要的结果。
1.画一条水平虚线
代码如下所示:
import android.content.context; import android.graphics.canvas; import android.graphics.color; import android.graphics.dashpatheffect; import android.graphics.paint; import android.util.attributeset; import android.view.view; public class custview extends view{ private paint mpaint; //定义画笔 public custview(context context, attributeset attrs) { super(context, attrs); //初始化画笔 initpaint(); setlayertype(view.layer_type_software, mpaint); //4.0以上关闭硬件加速,否则虚线不显示 } private void initpaint() { mpaint = new paint(); mpaint.setantialias(true); //设置抗锯齿的效果 mpaint.setstyle(paint.style.stroke); //设置画笔样式为描边 mpaint.setstrokewidth(3); //设置笔刷的粗细度 mpaint.setcolor(color.red); //设置画笔的颜色 mpaint.setpatheffect(new dashpatheffect(new float[]{5,5,5,5}, 1)); //设置画笔的路径效果为虚线效果 } @override protected void ondraw(canvas canvas) { super.ondraw(canvas); canvas.drawline(0, 0, 100, 0, mpaint); } }
布局文件中引用如下:
<com.test.custview android:layout_width="100dp" android:layout_height="10dp" android:layout_margintop="10dp" />
说明:在自定义view的代码中,ondraw方法中执行的drawline方法,全名如下:
public void drawline (float startx, float starty, float stopx, float stopy, paint paint)
startx:起始端点x坐标
starty:起始端点y坐标
stopx:终止端点x坐标
stopy:终止端点y坐标
上面四个左边的值均以相对位置计算,即与左边控件的相对位置,如果左边没有控件则手机屏幕左边框的相对位置计算。
canvas.drawline(0, 0, 100, 0, mpaint);表示的是相对左边为x,y坐标为0的位置开始,向右画出100px的虚线。
去掉button按钮后,相对位置开始以屏幕左边框计算,如图所示:
还有一点需要注意的是,stopx和stopy的值,不能超过该控件在xml中layout_width和layout_height的值,否则将会以值最小的为基准,超出的长度无效。
2.画一条垂直虚线
与上面代码一致,只需要修改至下面一处:
canvas.drawline(0, 0, 0, 100, mpaint);
3.画一个实心圆
1).首先设置画笔样式为实心
mpaint.setstyle(paint.style.fill); //设置画笔样式为填充
2).在画布中画圆
canvas.drawcircle(50, 50, 50, mpaint);
同样x和y的值,不能超过该控件在xml中layout_width和layout_height的值。
4.画一个圆环
同样只需稍微修改一下代码:
@override protected void ondraw(canvas canvas) { super.ondraw(canvas); canvas.drawcircle(50, 50, 50, mpaint); //画一个外圆 mpaint.setcolor(color.white); //重新设置画笔颜色 canvas.drawcircle(50, 50, 30, mpaint); //画一个内圆 }
5.画一个矩形
@override protected void ondraw(canvas canvas) { super.ondraw(canvas); rectf rect = new rectf(0, 0, 80, 60); canvas.drawrect(rect, mpaint); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
Android自定义View实现shape图形绘制
-
Android通过自定义View实现随机验证码
-
Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中
-
Android自定义View实现支付宝支付成功-极速get花式Path炫酷动画
-
Android自定义View实现闪耀字体效果
-
Android自定义View实现通讯录字母索引(仿微信通讯录)
-
Android自定义控件(实现视图树绘制指示器)
-
Android自定义View 实现水波纹动画引导效果
-
Android自定义View实现shape图形绘制
-
Android自定义Animation实现View摇摆效果