Cómo enmascarar Bitmap con el sombreado LinearGradient correctamente?

Estoy tratando de enmascarar Bitmap con gradiente alfa en la parte inferior. El tamaño de degradado es fijo e independiente del tamaño de mapa de bits. Pero dibuja incorrecto: parte inferior del gradiente en la parte superior, que la parte superior. ¿Qué pasa?

Introduzca aquí la descripción de la imagen

Hay código de ejemplo:

final int GRADIENT_HEIGHT = 32; public Bitmap addGradient(Bitmap src) { int w = src.getWidth(); int h = src.getHeight(); Bitmap overlay = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(overlay); canvas.drawBitmap(src, 0, 0, null); Paint paint = new Paint(); LinearGradient shader = new LinearGradient(0, 0, 0, GRADIENT_HEIGHT, 0xFFFFFFFF, 0x00FFFFFF, TileMode.REPEAT); paint.setShader(shader); paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); canvas.drawRect(0, h - GRADIENT_HEIGHT, w, h, paint); return overlay; } 

¡Gracias!

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