ImageView:onDraw方法在图像背景“后面”绘制,而不是在顶部

时间:2012-06-24 09:34:01

标签: android imageview ondraw

以下是ImageView的简单扩展代码,允许用户用手指进行绘制。

public class MyImageView extends ImageView {

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

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

    @Override
    public void onDraw(Canvas canvas) {
        for (Point point : points) {
            canvas.drawCircle(point.x, point.y, 5, paint);
            // Log.d(TAG, "Painting: "+point);
        }
        super.onDraw(canvas);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);
        Point point = new Point();
        point.x = event.getX();
        point.y = event.getY();
        points.add(point);
        invalidate();
        Log.d("", "point: " + point);
        return true;
    }

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

这项工作很顺利。

现在,我想使用此代码在位图的顶部绘制。

我用过:

MyImageView ivPic = (MyImageView) dialog.findViewById(R.id.ivPic);
ivPic.setImageBitmap(picture);

但是绘图是在“Bitmap”后面绘制的:

enter image description here

您是否知道如何在位图的“顶部”绘制?

3 个答案:

答案 0 :(得分:5)

我已经在onDraw方法中更改了顺序,我在开头放了super.onDraw(canvas);,我觉得它现在有用了

答案 1 :(得分:2)

覆盖并使用dispatchDraw方法,我用它来绘制视图

答案 2 :(得分:0)

我回答了自己的问题,刚刚找到答案:

ivPic.setBackgroundDrawable(new BitmapDrawable(getResources(),picture));

不知道这是否是最好的做法,但这对我有用......