Alguém poderia tentar me explicar 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 de desenho é nulo e define o bitmap como nulo?
Devo realmente desenhar a visualização antes que o cache seja definido?
Obrigado!
android
android-view
Bex
fonte
fonte
getDrawingCache()
usoView#draw
deCanvas
abordagemRespostas:
Eu também estava tendo esse problema e encontrei esta resposta:
fonte
se
getDrawingCache
é semprereturning null
caras: use isto:Referência: https://stackoverflow.com/a/6272951/371749
fonte
getLayoutParams
vez de v.getWidth () e v.getHeight ()?ImageView
ainda não recebeu uma imagem, então parece ser 0. Isso funcionaria de forma diferente para o código de pessoas diferentes, mas certifique-se de que sua chamada paraloadBitmapFromView()
é definitivamente depois seuImageView
contém uma imagem.O motivo básico para obtermos nulos é que a visualização não é dimensionada. Todas as tentativas, então, usando view.getWidth (), view.getLayoutParams (). Width, etc., incluindo view.getDrawingCache () e view.buildDrawingCache (), são inúteis. Portanto, você precisa primeiro definir as dimensões da vista, por exemplo:
(Você já definiu 'largura' e 'altura' como gostaria ou os obteve com WindowManager, etc.)
fonte
Estou usando isso.
fonte
Trabalhe melhor 4me
fonte
Se a visualização que você deseja capturar realmente aparece na tela, mas retorna nulo. Isso significa que você captura a visualização antes que o gerenciador de janelas a gere. Alguns layouts são muito complicados. Se o layout inclui layouts aninhados, layout_weight..etc, ele faz com que o relayout obtenha o tamanho exato várias vezes. A melhor solução é esperar até que o gerenciador de janelas termine o trabalho e então obter a captura de tela. Tente colocar getDrawingCache () no manipulador.
fonte
As respostas de @ cV2 e @ nininho funcionam para mim.
Um dos outros motivos pelos quais descobri da maneira mais difícil é que a visualização que eu tinha gerava uma visualização com largura e altura 0 ( ou seja, imagine ter um TextView com um texto de string de uma string vazia ). Nesse caso, getDrawingCache retornará null, portanto, certifique-se de verificar isso. Espero que ajude algumas pessoas por aí.
fonte
O erro pode ser porque sua visualização é muito grande para caber no cache de desenho .
Recebi a explicação do meu problema "View.getDrawingCache retorna null" em meus registros:
A documentação do Android também diz : Os dispositivos Android podem ter até 16 MB de memória disponível para um único aplicativo. É por isso que você não pode carregar um bitmap grande.
fonte
Estou tentando criar o número n de imagens dinamicamente com base no modo de exibição.
Acho que esse código vai ajudar alguém ..
fonte
Esta é a maneira simples e eficiente de obter bitmap
fonte