¿Dónde desasignar correctamente el mapa de bits en Android View?

Tengo una vista personalizada, que dibuja un montón de cosas, incluyendo mapas de bits. Quiero almacenar en caché este dibujo en un mapa de bits, de modo que sólo necesito dibujar un solo mapa de bits dentro de onDraw, en lugar de repetir estas tareas de dibujo y cálculo.

Los mapas de bits se deben reciclar después de que ya no lo utilice. No veo onDestroy () ni nada remotamente similar en la clase View. ¿Hay un método de devolución de llamada que pueda anular para lograr esto?

public void <insert_callback_here>() { cachedBitmap.recycle(); } 

No hay animación. Esta es una imagen estática. Hay un montón de cálculos hechos para dibujar la imagen, así que prefiero hacerlo una vez en onMeasure ().

Voy a contestar la mía aquí. Los métodos adecuados para anular es onDetachedFromWindow . Desasigno mi mapa de bits dentro de onDetachedFromWindow y los onMeasure dentro de onMeasure si el ancho o la altura han cambiado.

 @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (cachedBitmap != null && !cachedBitmap.isRecycled()) { cachedBitmap.recycle(); cachedBitmap = null; cachedBitmapWidth = -1; cachedBitmapHeight = -1; } } protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int viewWidth = MeasureSpec.getSize(widthMeasureSpec);; int viewHeight = MeasureSpec.getSize(heightMeasureSpec);; if (cachedBitmapWidth != viewWidth || cachedBitmapHeight != viewHeight) { if (cachedBitmap != null) { cachedBitmap.recycle(); } cachedBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); cachedBitmapWidth = viewWidth; cachedBitmapHeight = viewHeight; Canvas canvas = new Canvas(cachedBitmap); // do drawings here.. } setMeasuredDimension(viewWidth, viewHeight); } 
  • Cargando imágenes remotas
  • ¿Android View.postDelayed referencia de la fuga?
  • SendUserActionEvent () es null
  • ¿View.setVisibility (View.VISIBLE) obliga a la vista a volver a dibujar incluso si ya es visible?
  • ExpandableListView - ¿Es posible la expansión condicional?
  • Problema para agregar vista dinámicamente en Linearlayout
  • Consiga enfocado View from ViewPager
  • Cómo pasar un valor de cadena a webView de una actividad
  • Los elementos de ExpandableListView se mezclan
  • Android - no puede capturar el espacio atrás / borrar la prensa en suave. teclado
  • A veces listView.getChildAt (int index) devuelve NULL (Android)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.