Android简单绘图

一、用到的控件

ImageView:相当于一种图片容器,可以加载各种图标

Bitmap:位图,一种处理图片的类

Canvas:画布

Paint:画笔

我理解的绘画整个过程为画笔在画布上作画,再将画布画在Bitmap上,最后利用ImageView加载出图片。

二、实现步骤

1.添加控件ImageView

控件添加方法在笔者上一篇文章中有提及,此处不再赘述

2.创建Bitmap

Bitmap的构造方法是私有的,所以不能利用new来创建。创建方法如下: Bitmap map=Bitmap.creatBitmap(width,height,Config config)。第三个参数为枚举类型,定义了位图的4种格式。分别为:

ALPHA_8 代表8位Alpha位图

ARGB_4444 代表16位ARGB位图

ARGB_8888 代表32位ARGB位图

RGB_565 代表8位RGB位图

位图位数越高代表可以存储的颜色信息越多,即图片越逼真。

此处需注意宽度和高度不可直接利用ImageView获取其宽度和高度。因为ImageView在主线程运行到创建Biamap时还未加载好,容易出错。若想在整个屏幕区域绘图可获取手机的宽度和高度,方法如下:

DisplayMetrics metrics=new DisplayMetrics;

getWindowManager().getDefaultDisplay().getMetrics(metrics);

int width=metrics.widthPixels;

int height=metrics.heightPixels;

3.创建画布

Canvas c=new Canvas(Bitmap map);

4.创建画笔

Paint p=new Paint();

5.在ImageView上添加触摸监听OntouchListener

三、代码实现

下面代码可画渐变色曲线

主线程

public class MainActivity extends Activity {
	private ImageView iv;
	private Bitmap map;
	private Canvas c;
    private Paint p;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.fragment_main);
		DisplayMetrics m=new DisplayMetrics();
		//获取ImageView
		iv = (ImageView) findViewById(R.id.imageView1);
		getWindowManager().getDefaultDisplay().getMetrics(m);
		//创建位图
		map=Bitmap.createBitmap(m.widthPixels,m.heightPixels,Bitmap.Config.ARGB_8888);
		//获取画布
		c=new Canvas(map);
		//设置画布颜色
//		c.drawColor(Color.RED);
		//获取画笔
		p=new Paint();
		//设置画笔颜色
//		p.setColor(Color.RED);
		//设置画笔粗细
		p.setStrokeWidth(10);
		//把背景画上
		c.drawBitmap(map, new Matrix(), p);
		//加监听
	    iv.setOnTouchListener(new Listener(iv, map, c, p));
	}

监听类

public class Listener implements OnTouchListener {
	private ImageView iv;
	private Bitmap map;
	private Canvas c;
    private Paint p;
    private float sx,sy,ex,ey;
	public Listener(ImageView iv, Bitmap map, Canvas c,Paint p) {
		super();
		this.iv = iv;
		this.map = map;
		this.c = c;
		this.p=p;
	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// TODO Auto-generated method stub
		switch(event.getAction()){
		case MotionEvent.ACTION_DOWN:
			//获取按下时坐标
			sx=event.getX();
			sy=event.getY();
			break;
		case MotionEvent.ACTION_MOVE:
			//获取移动时坐标
			ex=event.getX();
			ey=event.getY();
			p.setColor(Color.rgb((int)sx, (int)sy, (int)ey));
			//画直线
			c.drawLine(sx, sy, ex, ey, p);
			//交换坐标
			sx=ex;
			sy=ey;
			//加载画好的图片
			iv.setImageBitmap(map);
			break;
		}
		return true;
	}

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值