Android绘图技巧

Android中有一些绘图技巧,可以方便绘图。

一、Canvas:

        Canvas作为绘制图形的直接对象,提供了几个很有用的方法。

        Canvas.save():保存画布。作用:将之前的所有已绘制图像保存起来,让后续的操作就好像造一个新的图层上操作一样。

        Canvas.restore():合并图层操作。将在save()之后绘制的所有图像与save()之前的图像进行合并。

        Canvas.translate(x,y):将坐标原点从(0,0)移到(x,y)。

        Canvas.rotate(x):将坐标系顺时针旋转x度。


         绘制一个仪表盘:


        思路: 1、绘制一个外圆圈。

                     2、绘制刻度线:包含四个长的刻度线和其他短的刻度线。

                     3、绘制刻度值:包含长刻度线对应的刻度值和短刻度线对应的刻度值。

                     4、绘制指针:一粗一细两个指针。

                   代码:

		int width = getWidth();
		int height = getHeight();
		
		//画外圆
		paint.setStyle(Paint.Style.STROKE);
		paint.setStrokeWidth(5);
		canvas.drawCircle(width / 2, height / 2, width / 2, paint);
		
		//画刻度
		paint.setStrokeWidth(3);
		for(int i = 0; i < 24; i++){
			//区分整点与非整点
			if(i == 0||i == 6||i == 12||i == 18){
				paint.setStrokeWidth(5);
				paint.setTextSize(30);
				canvas.drawLine(width / 2, height / 2 - width / 2, width / 2, height / 2 - width / 2 +60, paint);
				String degree = String.valueOf(i);
				canvas.drawText(degree, width / 2 - paint.measureText(degree) / 2, height / 2 - width / 2 +90, paint);
			}else{
				
				paint.setTextSize(15);
				canvas.drawLine(width / 2, height / 2 - width / 2, width / 2, height / 2 - width / 2 +30, paint);
				String degree = String.valueOf(i);
				canvas.drawText(degree, width / 2 - paint.measureText(degree) / 2, height / 2 - width / 2 +60, paint);
				
			}
			
			//通过旋转画布简化坐标计算
			canvas.rotate(15, width / 2, height / 2);
		}
		
		//画指针
		paint.setStrokeWidth(20);
		canvas.save();
		canvas.translate(width / 2, height / 2);
		canvas.drawLine(0, 0, 100, 100, paint);
		paint.setStrokeWidth(10);
		canvas.drawLine(0, 0, 100, 200, paint);
		canvas.restore();

二、Layer图层:  

       在Android中,使用saveLayer()方法创建一个图层,是基于栈的结构进行管理的。调用saveLayer()、saveLayerAlpha()方法将一个图层入栈,使用restore()、restoreToCount()将一个图层出栈。

      代码:

		canvas.drawColor(Color.WHITE);
		paint.setColor(Color.BLUE);
		
		canvas.drawCircle(150, 150, 100, paint);
		
		canvas.saveLayerAlpha(0, 0, 400, 400, 127, LAYER_TYPE_HARDWARE);
		paint.setColor(Color.RED);
		canvas.drawCircle(200, 200, 100, paint);
		
		canvas.restore();

效果图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值