Ninepatch escala incorrecta al desplazarse después de aplicar un filtro de color?
hoy he intentado hacer mi listview un poco más dinámico. Así que he creado un blanco de nuevepatch-imagen y agregó un filtro de color con el método .setColorFilter. Ese no es el problema. Pero después de aplicar esto, cada vez que me desplazo la imagen está escalando mal (al azar) así que deja para decir que mi artículo es 100dp alto con un poco de texto. Después de desplazar el elemento sigue siendo 100dp alto y todo el texto se muestra, pero la imagen en el fondo sólo utiliza 50dp ahora.
Aquí está mi código:
- ¿Cómo animar recyclerview en desplazamiento como Google plus / Google newsstand?
- Android personalizado listview muy lento al desplazarse
- Vista previa de desplazamiento en Viewpager
- Desplazamiento suave en Android
- Detener el desplazamiento en una vista de lista
aquí cómo fijo el Colorfilter:
orgleftbox = context.getResources().getDrawable(R.drawable.list_bubble); orgleftbox.setColorFilter( 0xff00c0ff, Mode.MULTIPLY );
y aquí cómo lo agrego en mi adaptador
v = inflater.inflate(R.layout.list_view_item, null); TextView t = (TextView)v.findViewById(R.id.text); t.setBackgroundDrawable(orgrightbox);
Espero que alguien me ayude. Porque este error me molesta;
- Android: ¿Cómo puedo acelerar el desplazamiento de GridView?
- Cómo utilizar RecyclerView.scrollToPosition () para mover la posición a la parte superior de la vista actual?
- Sin elástico Desplazamiento en ListView
- Que sería lo mejor para hacer una aplicación de desplazamiento horizontal en android?
- Desactivar la animación de desplazamiento de ViewPager
- ¿Cómo desplazarse a la parte inferior de un RecyclerView? ScrollToPosition no funciona
- ¿Cómo obtener el ListView con desplazamiento de carrusel en Android?
- Array Index fuera de límite cuando se desplaza la vista de lista rápidamente mientras se actualizan los datos desde el servidor
Su interpretación es correcta, no puede utilizar el Drawable en varias vistas. El dibujable tiene un tamaño establecido por su vista, por lo que si lo adjunta a varias vistas al mismo tiempo, no funcionará correctamente a menos que las vistas tengan exactamente la misma dimensión.
yo era capaz de arreglar mi problema por mi cuenta. Así que respondo a esto para todos los demás;).
El problema era que cargué mi drawable una vez en el constructor, porque pensé así que no tendré que cargarlo para cada listitem nuevo. Pero el sistema androide los maneja como el mismo objeto de memoria. así que cada listitem-background utiliza el mismo mem-space (espero que no esté mal, creo que sí). Si empiezo a desplazarse el siguiente listitem será declarado y cambiará la altura y el ancho de su fondo a sus necesidades, ejemplo el siguiente elemento es sólo 50dp alto cambia el valor guardado a éste. Ahora cualquier otro fondo de la lista cambiará más o menos a esta altura también.
El arreglo simple es, que usted tiene que cargar y aplicar el colorfilter para cada artículo nuevo. espec. en el método getView.
@Override public View getView(int pos, View convertView, ViewGroup parent) { View v = null; leftbox = (NinePatchDrawable) r.getDrawable(R.drawable.bubble_green); leftbox.setColorFilter( 0xff00c0ff, Mode.MULTIPLY ); v = inflater.inflate(R.layout.list_view_item_right, null); TextView t = (TextView)v.findViewById(R.id.text); t.setBackgroundDrawable(leftbox);
Espero que esta respuesta sea útil.
EDIT (Mil veces más simple):
Si sólo desea aplicar un colorFilter a un Layout (Textview …) hágalo de esta manera (gracias Pasha):
TextView t = (TextView)v.findViewById(R.id.text); t.getBackground().setColorFilter(0xff00c0ff, Mode.MULTIPLY );
- Aplicación androide "Sin certificado par"
- Los botones AlertDialog siempre cierran el cuadro de diálogo una vez que se hace clic