android - getDrawingCache siempre devuelve el mismo mapa de bits
bitmap rootview (1)
Creo que eso se debe a que su mapa de bits anterior todavía está en su caché de dibujo. Debido a esto, primero debe eliminarlo de la memoria caché y luego colocar la nueva Imagen en la memoria caché. Eche un vistazo a esta pregunta, que parece ser sobre el mismo tema:
Eliminación de la memoria caché de dibujo
EDITAR: Entonces, aquí está el código que funciona para mí. Uso un botón para guardar el mapa de bits y luego establezco el mapa de bits en una vista de imagen:
private View rootView;
private ImageView bitmapView;
private Button switchButton;
public Bitmap capturedScreen;
public boolean bitmapNeeded = false;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// do the other stuff
rootView.setDrawingCacheEnabled(true); //enable Drawing cache on your view
switchButton.setOnClickListener(this);
}
...
@Override
public void onClick(View v) {
if (v == switchButton) { //when the button is clicked
captureScreen();
}
}
public void captureScreen() {
rootView.buildDrawingCache();
capturedScreen = Bitmap.createBitmap(rootView.getDrawingCache());
imageView.setImageBitmap(capturedScreen);
rootView.destroyDrawingCache();
}
....
//In the onDraw method of your View:
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(capturedScreen, 0, 0, paint);
}
Así es como funciona: cada vez que el usuario hace clic en el botón, todo dentro de rootView
se guarda como un mapa de bits y luego se dibuja en el imageView
. Por supuesto, puede llamar al método captureScreen desde cualquier lugar de su código, si es necesario.
Espero que este ejemplo te ayude.
Actualmente estoy trabajando en un proyecto que necesita mostrar un cuadro de diálogo con un fondo gris (negro / blanco). Para lograr esto, estoy tomando una captura de pantalla y de toda la aplicación, coloque esta captura de pantalla en el fondo del cuadro de diálogo de pantalla completa y coloque un ColorFilter para que esté atenuada.
Esto funciona perfectamente por primera vez, pero si me desplazo por el contenido subyacente y vuelvo a solicitar el diálogo, muestra el mismo fondo que el anterior.
Yo uso el código:
Bitmap bitmap;
View rootView = getActivity().getWindow().getDecorView().findViewById(android.R.id.content);
rootView.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(rootView.getDrawingCache());
rootView.setDrawingCacheEnabled(false);
imageView.setImageBitmap(bitmap);
En otras palabras, getDrawingCache () siempre devuelve la misma captura de pantalla de la aplicación.