我有一个Android应用程序,我需要拍照,显示它然后能够放置标记图标。 我成功拍摄了照片并将其显示在ImageView上,但现在我尝试将标记放在它上面,所以我搜索并发现一个很好的解决方案是将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也不会被触发......
任何提示?
答案 0 :(得分:0)
onDraw
。将invalidate()
添加到onTouchEvent
以强制刷新可能会解决您的问题。