2015-03-17 2 views
0

En ce moment j'ai une activité qui affiche une image. Je veux pouvoir dessiner un cercle sur l'image. Le bouton 'dessiner' est censé dessiner un cercle sur l'image, mais pour une raison quelconque, il écrase le bitmap d'origine au lieu de dessiner sur le dessus.Android: Utilisation de la toile pour dessiner sur une imageview

Comment faire pour que le bouton place un cercle sur le bitmap/image d'origine au lieu d'en créer un nouveau?

public class ImageDisplayActivity extends FragmentActivity { 

    public static final String KEY_PATH = "img.jpg"; 
    private ZoomInZoomOut touch; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_image_display); 
     Intent intent = getIntent(); 
     String path = getIntent().getStringExtra(ImageDisplayActivity.KEY_PATH); 
     try { 
      java.io.FileInputStream in = this.openFileInput(path); 
      Bitmap bitmap = BitmapFactory.decodeStream(in); 
      touch = (ZoomInZoomOut) findViewById(R.id.IMAGEID); 
      touch = arrangeImageView(touch); 
      touch.setImageBitmap(bitmap); 
      in.close(); 
      Button draw = (Button) findViewById(R.id.draw); 
      draw.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        Bitmap imageBitmap = Bitmap.createBitmap(200, 
          200, Bitmap.Config.ARGB_8888); 
        Canvas canvas = new Canvas(imageBitmap); 
        Paint p = new Paint(); 
        p.setAntiAlias(true); 
        p.setColor(Color.BLUE); 
        p.setStyle(Paint.Style.STROKE); 
        canvas.drawCircle(100, 100, 5, p); 
        touch.setImageBitmap(imageBitmap); 
       } 
      }); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private ZoomInZoomOut arrangeImageView(ZoomInZoomOut img) { 
     try { 
      img.setRotation(90); 
      img.setScaleX(1.8f); 
      img.setScaleY(1.8f); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return img; 
    } 
} 

Répondre

0

SetImageBitmap remplace le bitmap actuel par le nouveau. Il ne dessine pas dessus. Le moyen le plus simple de résoudre ce problème est d'obtenir le bitmap de la vue de l'image, de le dessiner sur imageBitmap, puis de dessiner le cercle sur imageBitmap.

+0

En termes de code, comment procéder pour dessiner le bitmap sur imageBitmap? – nnnnnnitters

+0

canvas.drawBitmap (originalBitmap). Si vous n'avez pas le bitmap d'origine, utilisez le cache de dessin ou imageView.getDrawable et drawable.draw (canvas) –