2017-06-29 60 views
0

我有一個Android應用程序,我需要拍攝照片,顯示它,然後才能將其標記爲圖標。 我成功地拍攝了照片並將其顯示在ImageView上,但現在我試圖在其上放置標記,因此我搜索並發現一個好的解決方案是子類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是n因爲我不能借鑑它而開除。

但是,如果我用這個:

mCustomImageView.setImageBitmap(myMutableBitmap); 

然後將圖像顯示和觸摸事件被髮送。但我認爲這種方式我不畫在畫布上,並且onDraw也不會被解僱......

任何提示?

回答

0

onDraw觸摸事件後不會調用。添加invalidate()onTouchEvent強制刷新可能會解決您的問題。

+0

完美!謝謝 ! – sylvain