首页 > 解决方案 > 在 ImageView 上绘图

问题描述

我正在尝试在图像上绘制,稍后我将与图纸一起保存。我的 xml 只有 ImageView,我试图覆盖 onDraw。它只制作了 de Canvas 作品,但没有图像。

public class Body1 extends View {

    public LayoutParams params;
    private Path path = new Path();
    private Paint brush = new Paint();


    public Body1(Context context) {
        super(context);

        brush.setAntiAlias(true);
        brush.setColor(Color.MAGENTA);
        brush.setStyle(Paint.Style.STROKE);
        brush.setStrokeJoin(Paint.Join.ROUND);
        brush.setStrokeWidth(8f);

        params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);


    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float pointX = event.getX();
        float pointY = event.getY();

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                path.moveTo(pointX, pointY);
                return true;
            case MotionEvent.ACTION_MOVE:
                path.lineTo(pointX, pointY);
                break;
            default:
                return false;
        }
        postInvalidate();
        return false;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawPath(path, brush);
    }
}

标签: javaandroidcanvasbitmap

解决方案


好的,你在正确的道路上。您缺少的是无效调用,这将导致操作系统调用视图的 OnDraw。

每次要更新视图时调用 invalidate。但请注意,您的类只有一个路径对象,因此只会绘制最后一段。

如果我没记错的话,你应该持有一个ArrayList对象Path。在onDraw你应该循环它们并一个接一个地绘制它们。


推荐阅读