«

Android 触屏画图

时间:2024-3-2 19:35     作者:韩俊     分类: 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;
        }
}




        <p>版权声明:本文为博主原创文章,未经博主允许不得转载。</p>

标签: android

热门推荐