getDrawingCache () restituisce null

Sto lavorando ad una semplice applicazione per la pittura e cerco di implementare la funzionalità di dare più spazio per disegnare quando un utente richiede, cosa che pensavo potrebbe essere fatta facendo semplicemente abilitare lo scorrimento della mia class CustomView (contenuta in un LinearLayout poi in un Classe ScrollView). Se non ho ridimensionato la class CustomView eseguendo Chunk 1, Chunk 2 funziona bene (salva semplicemente una schermata di disegno. In questo momento non c'è scorrimento.) Un bummer! Il Chunk 2 non riesce (view.getDrawingCache () restituisce null) quando viene eseguito il Chunk 1 (A questo punto, lo scorrimento è abilitato). Voglio salvare l'intera vista, inclusa la parte lasciata a causa dello scorrimento.

Chunk 1:

  • Come posso visualizzare 2 viste in 1 attività (android)?
  • Come cambiare il font in Android Studio 2.2 rc da grassetto al normale
  • Android: Riproduzione di AudioTrack più volte in caso di arresto anomalo
  • Cambiare il colore del cursore di searchView
  • impostare la listctivity dynamic
  • Android Studio "Il supporto corrente di GDR è deprecato"
  • CustomView view = (CustomView) findViewById(R.id.customViewId); height = 2 * height; view.setLayoutParams(new LinearLayout.LayoutParams(width, height)); 

    Chunk 2:

     CustomView view = (CustomView) findViewById(R.id.customViewId); view.setDrawingCacheEnabled(true); Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); view.setDrawingCacheEnabled(false); 

    Questi due blocchi di codici sono parti indipendenti e piccole in due methods diversi.

    Modificato: SOLVED

    Dopo miliardi di query Google, il problema è ora SOLVED;)
    Ho fatto riferimento a questo thread https://groups.google.com/forum/?fromgroups=#!topic/android-developers/VQM5WmxPilM .
    Quello che non ho capito era che il metodo getDrawingCache () ha il limite alla dimensione della class di visualizzazione (width e altezza). Se la class di visualizzazione è troppo grande, getDrawingCache () restituisce semplicemente null.
    Quindi, la soluzione non era quella di utilizzare il metodo e invece fare come sotto.

     CustomView view = (CustomView) findViewById(R.id.customViewId); Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); Canvas bitmapHolder = new Canvas(bitmap); view.draw(bitmapHolder); // bitmap now contains the data we need! Do whatever with it! 

  • l'altezza gridView è troppo alta quando si utilizza un image all'interno
  • L'avviatore ionico non può funzionare su crosswalk-lite: Imansible avviare ComponentInfo attività
  • Sensore di accelerometro Android
  • Notifica Annullamento automatico non chiama DeleteIntent
  • Unità - salva progresso nel gioco?
  • mostrare animazioni di immagini multiple
  • One Solution collect form web for “getDrawingCache () restituisce null”

    Devi call buildDrawingCache() , prima di poter utilizzare la bitmap.

    La cosa setDrawingCache(true) imposta solo la bandiera e attende il passaggio di disegno successivo per creare la bitmap della cache.

    Inoltre non dimenticare di call destroyDrawingCache() quando non è più necessario.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.