Android的2D画图(一)

本文详细介绍了Android SDK的基本2D绘图功能,并通过代码示例展示了如何绘制像素点、直线、正方形、三角形、弧线等图形。同时,通过调整颜色、样式和尺寸,演示了绘制不同类型的图形。最后,利用循环和数组操作实现了多条直线的绘制,增加了代码的灵活性和实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android SDK支持基本的2D绘图。这一节比较简单,但是要按照自己的想法实现自己想要的目标图还是有一点困难的,这个要到项目开发实际问题中方能见到它的美妙之处。此处给出一个例子看一下注释就明白了。

package mobile.android.draw;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Paint.Style;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

public class Main extends Activity
{
	class MyView extends View
	{
		private Paint paint1 = new Paint();
		private Paint paint2 = new Paint();
		private Paint paint3 = new Paint();
		private boolean useCenter = true;
		private float[] textSizeArray = new float[]
		{ 15, 18, 21, 24, 27 };

		@Override
		public boolean onTouchEvent(MotionEvent event)
		{
			if (useCenter)
			{
				useCenter = false;
				paint1.setColor(Color.RED);
				paint2.setColor(Color.BLACK);
				paint3.setColor(Color.GREEN);

				paint1.setStrokeWidth(6);
				paint2.setStrokeWidth(4);
				paint3.setStrokeWidth(2);

			}
			else
			{
				useCenter = true;
				paint1.setColor(Color.BLACK);
				paint2.setColor(Color.RED);
				paint3.setColor(Color.BLUE);
				paint1.setStrokeWidth(2);
				paint2.setStrokeWidth(4);
				paint3.setStrokeWidth(6);
			}
			for (int i = 0; i < textSizeArray.length / 2; i++)
			{
				float textSize = textSizeArray[i];

				textSizeArray[i] = textSizeArray[textSizeArray.length - i - 1];
				textSizeArray[textSizeArray.length - i - 1] = textSize;
			}

			invalidate();
			return super.onTouchEvent(event);
		}

		public MyView(Context context)
		{
			super(context);
			setBackgroundColor(Color.WHITE);

			paint1.setColor(Color.BLACK);
			paint1.setStrokeWidth(2);
			paint2.setColor(Color.RED);
			paint2.setStrokeWidth(4);
			paint3.setColor(Color.BLUE);
			paint3.setStrokeWidth(6);

		}

		//扩展多条直线
		private void drawLinesExt(Canvas canvas, float[] pts, Paint paint)
		{

			float[] points = new float[pts.length * 2 - 4];
			for (int i = 0, j = 0; i < pts.length; i = i + 2)
			{
				points[j++] = pts[i];
				points[j++] = pts[i + 1];

				if (i > 1 && i < pts.length - 2)
				{
					points[j++] = pts[i];
					points[j++] = pts[i + 1];
				}
			}

			canvas.drawLines(points, paint);
		}

		@Override
		protected void onDraw(Canvas canvas)
		{
			//绘制像素点
			canvas.drawPoint(60, 120, paint3);
			canvas.drawPoint(70, 130, paint3);
			canvas.drawPoints(new float[]
			{ 70, 140, 75, 145, 75, 160 }, paint2);
			//canvas.drawPoints(new float[]
			  //              			{ 70, 140, 75, 145, 75, 160 }, 1,4,paint2);

			//绘制直线
			canvas.drawLine(10, 10, 300, 10, paint1);
			canvas.drawLine(10, 30, 300, 30, paint2);
			canvas.drawLine(10, 50, 300, 50, paint3);
			//绘制正方形
			drawLinesExt(canvas, new float[]
			{ 10, 70, 120, 70, 120, 170, 10, 170, 10, 70 }, paint2);
			drawLinesExt(canvas, new float[]
			{ 25, 85, 105, 85, 105, 155, 25, 155, 25, 85 }, paint3);
			//绘制三角形
			drawLinesExt(canvas, new float[]
			{ 160, 70, 230, 150, 170, 155, 160, 70 }, paint2);
			//设置非填充状态
			paint2.setStyle(Style.STROKE);
			//画空心圆
			canvas.drawCircle(260, 110, 40, paint2);
			//设置填充状态
			paint2.setStyle(Style.FILL);
			//画实心圆
			canvas.drawCircle(260, 110, 30, paint2);

			RectF rectF = new RectF();
			rectF.left = 30;
			rectF.top = 190;
			rectF.right = 120;
			rectF.bottom = 280;

			//画弧
			canvas.drawArc(rectF, 0, 200, useCenter, paint2);
			
			rectF.left = 140;
			rectF.top = 190;
			rectF.right = 280;
			rectF.bottom = 290;
			paint2.setStyle(Style.STROKE);
			//画空心椭圆
			canvas.drawArc(rectF, 0, 360, useCenter, paint2);

			rectF.left = 160;
			rectF.top = 190;
			rectF.right = 260;
			rectF.bottom = 290;
			paint3.setStyle(Style.STROKE);
			//画空心圆
			canvas.drawArc(rectF, 0, 360, useCenter, paint3);

			float y = 0;
			//绘制文本
			for (int i = 0; i < textSizeArray.length; i++)
			{
				paint1.setTextSize(textSizeArray[i]);

				paint1.setColor(Color.BLUE);
				canvas.drawText("Android(宽度:" + paint1.measureText("Android")
						+ ")", 20, 315 + y, paint1);
				y += paint1.getTextSize() + 5;
			}
			paint1.setTextSize(22);
			canvas.drawPosText("圆形", new float[]{180,230, 210,250}, paint1);

		}
	}

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		
		super.onCreate(savedInstanceState);
		//装载视图
		setContentView(new MyView(this));
	}
}

上面写了一些注释,一目了然就可以知道怎么做了!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值