使用位图顶部的画布在自定义图像视图上绘制



我有一个Android应用程序,我需要拍照,显示它,然后能够放置一个标记图标。 我成功地拍摄了图片并将其显示在 ImageView 上,但现在我尝试在上面做标记,所以我搜索并发现一个很好的解决方案是子类化 ImageView,所以我就是这样做的,但是当我在我的自定义 Imageview 上绘制画布时,它是空白的......

这就是我的做法,首先是我的自定义图像视图:

public class CustomImageView extends AppCompatImageView {
    private Point mTouch;
    private Bitmap mMarker;
    public CustomImageView(Context context) {
        super(context);
        init();
    }
    public CustomImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    private void init() {
        mTouch = new Point();
        mMarker = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.ic_mark);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP) {
            mTouch =  new Point(Math.round(event.getX()), Math.round(event.getY()));
        }
        return super.onTouchEvent(event);
    }
    @Override
    protected void onDraw(Canvas c) {
        super.onDraw(c);
        Paint paint = new Paint();
        c.drawBitmap(mMarker, mTouch.x, mTouch.y, paint);
     }
}

以及我使用它的地方:

....
mCustomImageView = (CustomImageView) view.findViewById(R.id.mypic);
....
File imgFile = new File(getContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES),"mypic.jpg");
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
Bitmap myMutableBitmap = myBitmap.copy(Bitmap.Config.RGB_565,true);
mCanvas = new Canvas(myMutableBitmap);
mCustomImageView.draw(mCanvas);

然后什么都没有显示...似乎mCustomImageView是空的,当然onDraw永远不会被触发,因为我无法在上面绘制。

但是如果我使用这个:

mCustomImageView.setImageBitmap(myMutableBitmap);

然后显示图像,并发送触摸事件。但我认为这样我就不会在画布上画画,而且 onDraw 也不会被激发......

任何提示?

onDraw 在触摸事件后不调用。向onTouchEvent添加invalidate()以强制刷新可能会解决您的问题。

最新更新