SetShadowLayer provoca lento tiempo de dibujo en GridView?

Actualmente estoy trabajando con un GridView que contiene ImageViews y me gustaría sombras detrás de mis imágenes. Hay potencialmente, por ejemplo, 15 imágenes visibles en la cuadrícula en cualquier momento. Trabajando bajo la suposición de que quiero que mi pantalla para hacer a 50fps a aparecer suave, mi matemáticas muestra que quiero que el tiempo de dibujo total de cada ImageView no sea peor que alrededor de 1,3ms.

Eché un vistazo a cómo Romain Guy estaba haciendo sombras en su aplicación Shelves: http://code.google.com/p/shelves/source/browse/trunk/Shelves/src/org/curiouscreature/android/shelves/util/ ImageUtilities.java

Eso parecía tener sentido, así que creé la siguiente clase:

public class ShadowImageView extends ImageView { private static final int SHADOW_RADIUS = 8; private static final int SHADOW_COLOR = 0x99000000; private static final Paint SHADOW_PAINT = new Paint(); static { SHADOW_PAINT.setShadowLayer(SHADOW_RADIUS / 2.0f, 0.0f, 0.0f, SHADOW_COLOR); SHADOW_PAINT.setColor(0xFF000000); SHADOW_PAINT.setStyle(Paint.Style.FILL); } public ShadowImageView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void onDraw(Canvas canvas) { final int containerWidth = getMeasuredWidth(); final int containerHeight = getMeasuredHeight(); canvas.drawRect( SHADOW_RADIUS / 2.0f, SHADOW_RADIUS / 2.0f, containerWidth - SHADOW_RADIUS / 2.0f, containerHeight - SHADOW_RADIUS / 2.0f, SHADOW_PAINT); } } 

(Obviamente esto sólo me da rectángulos negros con sombras, pero fue suficiente para obtener una estimación inicial de rendimiento.)

Desplazarse a través de la cuadrícula estaba bastante agitado, así que comprobé los tiempos de dibujo que estaba recibiendo en el Visor de Jerarquía: ~ 3.5ms por ImageView. Esto sale a alrededor de 19fps en el mejor de los casos.

Sin embargo, si quito la sentencia setShadowLayer (), el Visor de jerarquía muestra tiempos de dibujo alrededor de 0,2ms por ImageView.

Si me olvido de drawRect () y en su lugar crear un parche de nueve con bordes de sombra, llamando setBackgroundResource (R.drawable.my_nine_patch) en onDraw (), veo tiempos de dibujo alrededor de 1,5ms por ImageView.

¿Existen problemas de rendimiento conocidos con Paint con un shadowLayer? ¿Estoy haciendo algo tonto en el código anterior?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.