用手指画在android屏幕上

时间:2012-10-21 12:58:05

标签: java android android-canvas android-view

我正在尝试使用触摸事件在屏幕上创建绘图。我成功地做了同样的事情。这是我正在使用的代码

public class DrawView extends View implements OnTouchListener {
    private static final String TAG = "DrawView";

    List<Point> points = new ArrayList<Point>();
    Paint paint = new Paint();

    public DrawView(Context context) {
        super(context);
        setFocusable(true);
        setFocusableInTouchMode(true);

        this.setOnTouchListener(this);

        paint.setColor(Color.BLACK);
        paint.setAntiAlias(true);
    }

    @Override
    public void onDraw(Canvas canvas) {
        for (Point point : points) {

            canvas.drawCircle(point.x, point.y, 8, paint);
            // Log.d(TAG, "Painting: "+point);
        }
    }

    public boolean onTouch(View view, MotionEvent event) {
        // if(event.getAction() != MotionEvent.ACTION_DOWN)
        // return super.onTouchEvent(event);
        Point point = new Point();
        point.x = event.getX();
        point.y = event.getY();
        points.add(point);
        invalidate();
        Log.d(TAG, "point: " + point);
        return true;
    }
}

class Point {
    float x, y;

    @Override
    public String toString() {
        return x + ", " + y;
    }
}

正如您所看到的,我正在为用户触摸的每个点画一个圆圈。当用户慢慢移动手指时,我会得到连续线/曲线。但是如果用户快速移动他的手指,我就不会连续画画了。而是手指移动的路径上的分离点列表。

我该如何正确地做到这一点? 感谢

2 个答案:

答案 0 :(得分:1)

你应该绘制路径而不是点本身。点击此处查看信息:http://developer.android.com/reference/android/graphics/Path.html

答案 1 :(得分:0)

我已经回答了一个类似的问题,在这篇文章中手绘地图:Hand Draw over MapView

您可以使用相同的代码,将GeoPoint替换为Point,并移除地理位置和点之间的转换。