2017-06-29 1 views
0

J'ai une application Android où je dois prendre une photo, l'afficher et ensuite mettre une icône de marque. J'ai réussi à prendre la photo et à l'afficher sur un ImageView, mais maintenant j'essaie de mettre la marque dessus, donc j'ai cherché et trouvé qu'une bonne solution était de sous-classer ImageView, donc c'est ce que j'ai fait, mais quand je dessine le toile sur mon Imageview personnalisé il est vide ...Dessiner sur un ImageView personnalisé en utilisant un canevas sur le bitmap

Voici comment je fais, d'abord mon ImageView personnalisé:

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); 
    } 

} 

et où je l'utilise:

.... 
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); 

Alors rien ne montre .. semble que mCustomImageView est vide, et bien sur onDraw est n jamais tiré comme je ne peux pas dessiner dessus.

Mais si j'utilise ceci:

mCustomImageView.setImageBitmap(myMutableBitmap); 

Ensuite, l'image montre, et les événements tactiles sont envoyés. Mais je pense que de cette façon, je ne dessine pas sur la toile, et onDraw n'est pas tiré aussi bien ...

Un indice?

Répondre

0

onDraw n'est pas appelée après un événement tactile. L'ajout de invalidate() à onTouchEvent pour forcer l'actualisation peut résoudre votre problème.

+0

Parfait! Merci ! – sylvain