Android 触屏画图

来源:互联网 发布:微博个性域名怎么隐藏 编辑:程序博客网 时间:2024/06/10 04:01

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 0