Autore Topic: da view (non visualizzata) a bitmap  (Letto 353 volte)

Offline Emma

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
da view (non visualizzata) a bitmap
« il: 24 Febbraio 2012, 15:45:53 CET »
0
Salve,

devo estrarre un bitmap da una view (per la precisione da un linear layout) che non è visualizzata sullo schermo. C'è un modo per far ciò ?
Nel caso sia renderizzata utilizzo semplicemente:
Codice (Java): [Seleziona]
LinearLayout ll = (LinearLayout) findViewById(R.id.linearLayout);
                ll.setDrawingCacheEnabled(false);
                if (!ll.isDrawingCacheEnabled()) {
                        ll.setDrawingCacheEnabled(true);
                }//Abilitazione della Drawing cache che permette di ottenere con getDrawingCache la Bitmap
                ll.setDrawingCacheBackgroundColor(Color.WHITE);
                ll.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
               
                Bitmap bitmapLL = ll.getDrawingCache(true);
che non funziona nel caso non lo sia perchè ll.getDrawingCache(true) = null.

Ringrazio tutti per l'aiuto!

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:da view (non visualizzata) a bitmap
« Risposta #1 il: 25 Febbraio 2012, 10:07:56 CET »
0
Ciao, non funziona perché probabilmente non viene proprio disegnato il layout. Non so se per "non visualizzato sullo schermo" tu intenda un layout creato da codice e non aggiunto ad alcun layout oppure altro.
Potresti provare a richiamare il metodo invalidate() manualmente e vedere se viene creata la cache, oppure puoi sempre utilizzare il metodo draw(Canvas canvas) -diverso dall'onDraw(Canvas canvas)-.   Il tutto dipende, ovviamente, da com'è la situazione. ;-)

Offline Emma

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:da view (non visualizzata) a bitmap
« Risposta #2 il: 27 Febbraio 2012, 09:20:50 CET »
0
Ciao,
grazie per la tua risposta. "Non visualizzato" intendo che sono su schermo perchè sto vedendo un'altra schermata.
Ecco come ho risolto:
Codice (Java): [Seleziona]
               
LinearLayout v = (LinearLayout) findViewById(R.id.linearLayoutImmagineEParte1);
    Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);                
    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
v.draw(c);
Questo però deve essere seguito da un "refresh" dello schermo perchè prima che l'immagine venga salvata nel bitmap viene stampata sullo schermo.