android自定义View(二)

本文详细介绍了自定义View中的自绘控件实现方式,包括使用Canvas类的常用方法如drawRect、drawCircle、drawArc、drawRoundRect、drawLine、drawOval和drawText进行图形绘制。

如果说要按类型来划分的话,自定义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实现图片手势滑动,多点触摸放大缩小效果



源码下载

   




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值