【问题标题】:Draw on the image instead of image view in android在图像上绘制而不是android中的图像视图
【发布时间】:2015-01-21 02:27:59
【问题描述】:

我正在开发一个绘图板应用程序。我想实现一个在图像上绘制的“笔”。

到目前为止,我已经创建了一个自定义图像视图:

public class CustomDraw extends ImageView {

    private int color = Color.BLACK;
    private float width = 4f;
    private List<Holder> holderList = new ArrayList<Holder>();

    private class Holder {      
        Path path;
        Paint paint;

        Holder(int color, float width) {
            path = new Path();
            paint = new Paint();
            paint.setAntiAlias(true);
            paint.setStrokeWidth(width);
            paint.setColor(color);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeJoin(Paint.Join.ROUND);
            paint.setStrokeCap(Paint.Cap.ROUND);
        }
    }

    public CustomDraw(Context context) {
        super(context);
        init();
    }

    public CustomDraw(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomDraw(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init() {
        holderList.add(new Holder(color, width));
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        for (Holder holder : holderList) {
            canvas.drawPath(holder.path, holder.paint);
        }
    }

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

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                holderList.add(new Holder(color,width));
                holderList.get(holderList.size() - 1).path.moveTo(eventX, eventY);
                return true;
            case MotionEvent.ACTION_MOVE:
                holderList.get(holderList.size() - 1).path.lineTo(eventX, eventY);
                break;
            case MotionEvent.ACTION_UP:
                break;
            default:
                return false;
        }

        invalidate();
        return true;
    }

    public void resetPaths() {
        for (Holder holder : holderList) {
            holder.path.reset();
        }
        invalidate();
    }

    public void setBrushColor(int color) {
        this.color = color;
    }

    public void setWidth(float width) {
        this.width = width;
        }
}

问题是,我怎样才能实际绘制图像而不是图像视图?这意味着,我不应该能够在图像之外绘制,并且当我缩放视图时,内容应该相应地缩放。我发现并尝试使用可扩展的可绘制对象,但似乎无法在运行时绘制。

谢谢

【问题讨论】:

标签: android android-canvas android-view android-custom-view android-drawable


【解决方案1】:

【讨论】:

  • 扩展surfaceview而不是imageview?那么一切都差不多了吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 2011-03-27
  • 2011-12-08
  • 2017-07-05
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多