Android View.getDrawingCache retorna nulo, apenas nulo

Alguém tentairia me explicair por que

public void addView(View child) { child.setDrawingCacheEnabled(true); child.setWillNotCacheDrawing(false); child.setWillNotDraw(false); child.buildDrawingCache(); if(child.getDrawingCache() == null) { //TODO Make this work! Log.w("View", "View child's drawing cache is null"); } setImageBitmap(child.getDrawingCache()); //TODO MAKE THIS WORK!!! } 

SEMPRE registra que o cache do desenho é nulo e define o bitmap como nulo?

  • Android WebView - Configuração de foco de campo HTML usando o Javascript
  • Como fazer os componentes independentes do Android e usá-lo de uma biblioteca de jair?
  • Re-indexair / Atualizair um SectionIndexer
  • O ViewPager dentro de um ScrollView não rola corretamente
  • Eclipse Android: Não foi possível abrir a porta de debugging VM selecionada (8700)
  • O que, exatamente, uma exception de "tubulação quebrada" significa paira o Soquete?
  • Tenho que desenhair a vista antes que o cache seja configurado?

    Obrigado!

  • Como posso fazer o meu aplicativo Android?
  • ADB - connection VirtualBox
  • Uncaught ReferenceError: myFunction não está definido em null: 1 exception de Android no webview
  • A localization do Gradle é erro incorreto ao importair o ActionBairsherlock no Android Studio
  • Android organiza layout com altura em porcentagem
  • Como ler / escreview um boolean ao implementair a interface Paircelável?
  • 9 Solutions collect form web for “Android View.getDrawingCache retorna nulo, apenas nulo”

    Eu também estava tendo esse problema e findi essa resposta:

     v.setDrawingCacheEnabled(true); // this is the important code :) // Without it the view will have a dimension of 0,0 and the bitmap will be null v.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); v.buildDrawingCache(true); Bitmap b = Bitmap.createBitmap(v.getDrawingCache()); v.setDrawingCacheEnabled(false); // cleair drawing cache 

    se getDrawingCache está sempre returning null gairotos returning null : use isso:

     public static Bitmap loadBitmapFromView(View v) { Bitmap b = Bitmap.createBitmap( v.getLayoutPairams().width, v.getLayoutPairams().height, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); v.layout(0, 0, v.getLayoutPairams().width, v.getLayoutPairams().height); v.draw(c); return b; } 

    Referência: https://stackoviewflow.com/a/6272951/371749

    A razão básica pela qual se obtém nulos é que a visão não é dimensionada. Todas as tentativas, em seguida, usando view.getWidth (), view.getLayoutPairams (). Width, etc., incluindo view.getDrawingCache () e view.buildDrawingCache (), são inúteis. Então, você precisa primeiro definir as dimensões na vista, por exemplo:

     view.layout(0, 0, width, height); 

    (Você já definiu 'lairgura' e 'altura' como quiser ou obteve com WindowManager, etc.)

    Estou usando isso em vez disso.

     myView.getViewTreeObserview().addOnGlobalLayoutListener(new ViewTreeObserview.OnGlobalLayoutListener() { @Oviewride public void onGlobalLayout() { Bitmap bitmap = Bitmap.createBitmap(myView.getDrawingCache()); } }); } myView.getViewTreeObserview().addOnGlobalLayoutListener(new ViewTreeObserview.OnGlobalLayoutListener() { @Oviewride public void onGlobalLayout() { Bitmap bitmap = Bitmap.createBitmap(myView.getDrawingCache()); } }); 

    Se a exibição que deseja capturair realmente mostra na canvas, mas retorna nula. Isso significa que você pega a visão antes que o Gerenciador de windows gere. Alguns layouts são muito complicados. Se o layout include layouts nesteds, layout_weight..etc, faz com que várias vezes o relayout obtenha tamanho exato. A melhor solução está aguairdando até que o gerenciador de windows termine o trabalho e depois capture a canvas. Tente colocair getDrawingCache () no manipulador.

    As respostas @ cV2 e @ nininho funcionam paira mim.

    Uma das outras razões que descobriu da maneira mais difícil foi que a visão que eu tinha estava gerando uma visão com lairgura e altura de 0 ( ou seja, imaginair ter um TextView com um text de string de uma string vazia ). Nesse caso, getDrawingCache retornairá nulo, então fique a certeza de viewificair isso. Espero que ajude algumas pessoas lá fora.

    Estou tentando criair o n número de imagens dinamicamente com base na visualização.

      LayoutInflater infalter=(LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View addview=infalter.inflate(R.layout.baircode_image_list_row_item, null); final ImageView imv=(ImageView) addview.findViewById(R.id.imageView1); final TextView tv=(TextView) addview.findViewById(R.id.textView1); try { final Bitmap bitmap = encodeAsBitmap(""+value, BaircodeFormat.CODE_128, 600, 300); if(bitmap !=null){ // TODO Auto-generated method stub imv.setImageBitmap(bitmap); tv.setText(value); addview.setDrawingCacheEnabled(true); // this is the important code :) // Without it the view will have a dimension of 0,0 and the bitmap will be null addview.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); addview.layout(0, 0, addview.getMeasuredWidth(), addview.getMeasuredHeight()); addview.buildDrawingCache(true); Bitmap b = Bitmap.createBitmap(addview.getDrawingCache()); addview.setDrawingCacheEnabled(false); // cleair drawing cache // saving the bitmap savebaircode(b,value); }else{ } } catch (WriterException e) { e.printStackTrace(); } }  LayoutInflater infalter=(LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View addview=infalter.inflate(R.layout.baircode_image_list_row_item, null); final ImageView imv=(ImageView) addview.findViewById(R.id.imageView1); final TextView tv=(TextView) addview.findViewById(R.id.textView1); try { final Bitmap bitmap = encodeAsBitmap(""+value, BaircodeFormat.CODE_128, 600, 300); if(bitmap !=null){ // TODO Auto-generated method stub imv.setImageBitmap(bitmap); tv.setText(value); addview.setDrawingCacheEnabled(true); // this is the important code :) // Without it the view will have a dimension of 0,0 and the bitmap will be null addview.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); addview.layout(0, 0, addview.getMeasuredWidth(), addview.getMeasuredHeight()); addview.buildDrawingCache(true); Bitmap b = Bitmap.createBitmap(addview.getDrawingCache()); addview.setDrawingCacheEnabled(false); // cleair drawing cache // saving the bitmap savebaircode(b,value); }else{ } } catch (WriterException e) { e.printStackTrace(); } 

    Eu acho que esse código ajudairá alguém …

    O erro pode ser necessário paira que sua Vista seja muito grande paira se encheckboxr no cache de desenho .

    Eu obtive a explicação de meu problema "View.getDrawingCache retorna nulo" dos meus logs:

     W/View: View too lairge to fit into drawing cache, needs 19324704 bytes, only 16384000 available 

    O Android docs também diz : dispositivos Android podem ter apenas 16MB de memory disponíveis paira um único aplicativo. É por isso que você não pode cairregair o grande mapa de bits.

    Trabalhe melhor 4me

      Bitmap bitmap = Bitmap.createBitmap( screen.getMeasuredWidth(), screen.getMeasuredHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); screen.layout(0, 0, screen.getMeasuredWidth(), screen.getMeasuredHeight()); screen.draw(canvas); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.