El caché ListView para diferentes filtros de color no funciona
Estoy utilizando un listview que utiliza el patrón de ViewHolder y obtener ventaja del mecanismo de almacenamiento en caché. Aquí hay un fragmento de código que intento establecer uno de los antecedentes de mi elemento de lista
if(drawable!=null) { if(this.backgroundBurnColor!=null && this.backgroundBurnColor.getValue()!=0) { Log.d("burncolor", this.backgroundBurnColor.getValue()+""); drawable.setColorFilter(this.backgroundBurnColor.getValue(), Mode.MULTIPLY); }else if(this.burnColorKey!=null) { Log.d("burncolor", this.Owner.getOwner().getColors().get(this.burnColorKey).getValue()+""); drawable.setColorFilter(this.Owner.getOwner().getColors().get(this.burnColorKey).getValue(), Mode.MULTIPLY); }else{ drawable.setColorFilter(null); } v.setBackgroundDrawable(drawable); }
En este código el drawable es para el mismo tipo de elemento, pero incluso si el mismo tipo de elemento cuando cambio la imagen dibujable cambia como yo quiero. Pero el cambio de filtro de color de los cambios dibujables de todos los filtros drawables en la lista de partes que aparecen en la pantalla. Por ejemplo, cuando me desplazo hacia abajo de la lista y un filtro de color diferente aparece en la pantalla, a continuación, todos los filtros de color drawables 'girar al mismo filtro, necesito obtener el filtro de color por separado para cada una de las filas. ¿Alguna ayuda? Gracias
- Listview dentro de un ViewPager con SlidingTabLayout - Problemas de altura
- Cómo animar la traducción de una vista
- ViewTreeObserver no llama a onScrollChanged después de agregar OnScrollChangedListener
- Cómo obtener todos los niños (visible e invisible) de un ListView?
- Android: Añadir fragmentos con android.R.id.content
- Descripción de las pérdidas de memoria en la aplicación de Android
- View.getContext devuelve null, ¿por qué?
- Fragmentos: ¿cuál es el mejor lugar para medir vistas?
- Animación de traducción para ocultar Vista
- ViewPager + SurfaceView = retraso largo al volver a la actividad
- Android ActionBar no visible
- ¿Cómo puedo reducir y deslizar una vista en el ángulo superior izquierdo?
- ¿Cómo mostrar el texto con un fondo de dos colores?
Para aquellos que se pregunta sobre la respuesta, hay una entrada en el blog de Romain Guy sobre mutaciones estirables en android: http://www.curious-creature.org/2009/05/02/drawable-mutations/
Cuando drawables se hace referencia desde los recursos, sólo una instancia de un Drawable inicializado, por lo que todas las referencias se refieren al mismo objeto. para esto hay un método mutate()
para drawables
En lugar de escribir
drawable.setColorFilter(null);
escritura
drawable.mutate().setColorFilter(null);
resolverá el problema
El filtro de color se establece en un Drawable
. Por lo tanto, si no desea que dos elementos tengan el mismo filtro de color, debe tener dos objetos Drawable
separados para esos dos elementos.
- ¿Es posible mostrar textos digitales en TextView en Android?
- No se puede agregar la dependencia del módulo a CordovaLib para el proyecto Cordova usando Android Studio