2013-08-29 17 views
7

Sto provando a disegnare un cerchio su un'immagine che è stata inserita come res/drawable/schoolboard.png. l'immagine riempie lo sfondo dell'attività. il seguente non funziona:Disegna un cerchio su un'immagine esistente

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.schoolboard); 
    Paint paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setColor(Color.BLUE); 

    Canvas canvas = new Canvas(bitmap); 
    canvas.drawCircle(60, 50, 25, paint); 

    ImageView imageView = (ImageView)findViewById(R.drawable.schoolboard); 
    imageView.setAdjustViewBounds(true); 
    imageView.setImageBitmap(bitmap); 

qualsiasi aiuto sarà molto apprezzato. Grazie.

risposta

10

ci sono alcuni errori nel codice: prima di cose non si può dare di riferimento Id per drawable in findViewById quindi penso che vuoi dire una cosa del genere

ImageView imageView = (ImageView)findViewById(R.id.schoolboard_image_view); 

schoolboard_image_view è l'ID immagine nel tuo Layout xml (controllare il layout per l'id destra)

BitmapFactory.Options myOptions = new BitmapFactory.Options(); 
    myOptions.inDither = true; 
    myOptions.inScaled = false; 
    myOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;// important 
    myOptions.inPurgeable = true; 

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.schoolboard,myOptions); 
    Paint paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setColor(Color.BLUE); 


    Bitmap workingBitmap = Bitmap.createBitmap(bitmap); 
    Bitmap mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true); 


    Canvas canvas = new Canvas(mutableBitmap); 
    canvas.drawCircle(60, 50, 25, paint); 

    ImageView imageView = (ImageView)findViewById(R.id.schoolboard_image_view); 
    imageView.setAdjustViewBounds(true); 
    imageView.setImageBitmap(mutableBitmap); 

assicurarsi di utilizzare l'immagine giusta per Id:

ImageView imageView = (ImageView) findViewById (R.id.schoolboard_image_view);

+1

Grazie per entrambi! modificato il file xml in modo da avere una visualizzazione di immagini, perché prima dell'immagine scolastica era definita come 'android: background =" @ drawable/schoolboard "' in RelativeLayout. ora funziona! – Kfir

5

Prima di tutto è necessario creare una nuova bitmap, poiché il bitmap dal metodo BitmapFactory.decodeResource() è immutabile. È possibile effettuare ciò con il seguente codice:

Bitmap canvasBitmap = Bitmap.createBitmap([bitmap_width], [bitmap_height], Config.ARGB_8888); 

Utilizzare questa bitmap nel costruttore Canvas. Quindi disegna la tua bitmap su tela.

Canvas canvas = new Canvas(canvasBitmap); 
canvas.drawBitmap(bitmap, 0, 0, bitmapPaint); 
canvas.drawCircle(60, 50, 25, paint); 

Anche R.drawable.schoolboard non è un ID di vista corretto.

ImageView imageView = (ImageView) findViewById (R.drawable.schoolboard);

Problemi correlati