Android 触屏画图

Android系统中触屏画图中主要需要解决以下问题:

1.      画图的视图,在哪上面画?

2.      怎么画?

3.      画的位置?

Android官方文档描述画图需要自定义视图(Custom View),通过重载OnDraw解决画的内容,OnMeasure处理画图的布局位置。自定义视图后,加入main.xml文件布局中,但加入布局需要在自定义视图中实现带有两个参数的构造函数(Context context,AttributeSet attrs),如自定义视图类DrawView,实现方式如下:

public DrawView(Context context,AttributeSet attrs) {
		super(context,attrs);
		//初始化对象
}
OnMeasure方法主要用于视图对象的大小(宽和高),在重载此方法时,必须通过调用setMeasuredDimension(int,int)来存储测量后的宽和高,否则会产生IlleagalStateException异常。

protected void onMeasure(int measuredWidth, int measuredHeight) {
	//计算View对象的宽和高
	//调用setMeasureDimension生效
	setMeasuredDimension(width|MeasureSpec.EXACTLY, height|MeasureSpec.EXACTLY);
}

OnDraw方法在每次调用Invalidate方法后对视图进行重画,画的内容则通过此方法来实现,而画图有两个基本元素:

1.      Canvas: 画布,画图的内容,画什么?

2.      Paint: 如何画?

例如:Canvas画出一条线段,Paint定义线段的颜色,宽度。

画图的内容则是通过OnDraw方法实现。

public void onDraw(Canvas canvas) {
		//画一张图片:将一张图片放在此视图中
		canvas.drawBitmap(mBmp, 0, 0,paint);
		//画出记录的点
		for (Point point : points) {
			point.draw(canvas, paint);
		}
}
画图的位置通过OnMeasure方法实现后,但由于是触屏画图则需要记录触点的位置,此过程通过实现OnTouchListener接口来捕捉该触屏事件,通过记录ACTION_MOVE和ACTION_DOWN事件中的坐标,最后在OnDraw函数中利用坐标画图一条直线,整个画图过程就完成了。

public boolean onTouch(View view, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_MOVE) {
point = new FriendlyPoint(event.getX(), event.getY(), new_col, points.get(points.size() - 1), wid_mode);	
		} else if (event.getAction() == MotionEvent.ACTION_DOWN) {	
			point = new Point(event.getX(), event.getY(), new_col, wid_mode);
		} else {
			return false;
		}
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值