android自定义View(二)

来源:互联网 发布:播音制作软件 编辑:程序博客网 时间:2024/05/16 14:25

如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。那么下面我们就来依次学习一下,每种方式分别是如何自定义View的。


一、自绘控件

自绘控件的意思就是,这个View上所展现的内容全部都是我们自己绘制出来的。绘制的代码是写在onDraw()方法中的.

在做自绘控件的之前,我们先来了解一下Canvas 这个类 的常用的几个方法:

canvas.drawRect(left, top, right, bottom, paint);绘制矩形

     paint.setColor(Color.RED);paint.setStyle(Style.STROKE);//绘制矩形canvas.drawRect(100, 50, 200, 100, paint); 


canvas.drawCircle(cx, cy, radius, paint):绘制圆形

<span style="white-space:pre"></span>    paint.setColor(Color.RED);paint.setStyle(Style.STROKE);paint.setStrokeWidth(2);/*绘制圆形 * cx 为中心横坐标 * cy 为中心纵坐标 * radius 为半径 * */<span style="white-space:pre"></span>canvas.drawCircle(75, 150, 50, paint);

canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint):绘制弧形

paint.setColor(Color.RED);paint.setStyle(Style.STROKE);paint.setStrokeWidth(2);/* 绘制弧形RectF 用来绘制圆弧的矩形区域当RecF 只有当绘制的矩形为 正方形  的时候,则绘制出来的弧形为圆形或扇形绘制圆弧的时候圆心坐标(centerX,centerY):  RecF矩形的中心点 半径 radio:  RecF矩形的边长startAngle: 圆弧角度的起始线, 以矩形的水平分割线的右边为基准  >0 顺时针,<0 逆时针 sweepAngle 圆弧角度的摆动线 ,以  startAngle起始线  为基准  >0 顺时针,<0 逆时针 useCenter 如果 为true 圆弧中心角度扫描的边界线将会被绘制出来,如果为false则表示  圆弧中心角度扫描的边界线将不会被绘制出来 */<span style="white-space:pre"></span>canvas.drawArc(new RectF(20, 20, 200, 200),  -20,  -20, true, paint); 

drawRoundRect(RectF rect, float rx, float ry, Paint paint) :绘制圆角矩形 

<span style="white-space:pre"></span>    paint.setColor(Color.RED);paint.setStyle(Style.STROKE);paint.setStrokeWidth(2);/* *绘制圆角矩形  * RectF 绘制矩形区域 * rx : x方向的圆角坐标 * ry : y方向的圆角坐标 *//*setARGB(int a,int r,int g,int b);   * 设置绘制的颜色,a代表透明度,a: 0-255 透明度递减 ,(256,257)完全透明,  * r,g,b代表颜色值。  */paint.setARGB(250,250,0,0); //设置锯齿 true: 绘制锯齿  false :不绘制锯齿(使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢)paint.setAntiAlias(false); //是否设置图像的抖动,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰  paint.setDither(true);canvas.drawRoundRect(new RectF(50, 50, 350, 350), 50,  50, paint);

canvas.drawLine(startX, startY, stopX, stopY, paint):绘制直线

paint.setColor(Color.RED);paint.setStyle(Style.STROKE);paint.setStrokeWidth(2);/* *绘制直线 * (startX,startY)为直线的起始点坐标 *  (stopX,stopY) 为直线的终点坐标 */canvas.drawLine(10, 150, 150, 150, paint);


 drawOval(RectF oval, Paint paint):绘制椭圆

paint.setColor(Color.RED);paint.setStyle(Style.STROKE);paint.setStrokeWidth(2);/* * 绘制椭圆 * RectF : 为要绘制椭圆的矩形区域  * 绘制的椭圆 一定要 与矩形的四条边有接触 ,所以可以在矩形中绘制椭圆 */canvas.drawOval(new RectF(50, 50, 500, 500), paint);


canvas.drawText(text, x, y, paint):绘制文本

paint.setColor(Color.RED);paint.setStyle(Style.STROKE);paint.setStrokeWidth(2);canvas.drawText("你好", 10, 50, paint);



相关文章链接:点击打开链接  

有关继承自定义View的实现:android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果



源码下载

   




0 0
原创粉丝点击