The introduction of the use of animation to achieve 3D Animation rotation page effect, now introduce the image of the realization of reflection, first look at the effect chart
This sample is implemented primarily by customizing gallery and Imageadapter (inherited from Baseadapter)
1. Reflection Drawing
Imageadapter inherits from Baseadapter, detailed implementation of visible Android sliding effect Introduction (ii)--gallery here focus on the reflection principle and realization
Reflection principle:
Reflection effect is mainly from the original image + spacing + reflection of the three parts, the height of about 3/2 of the original image (the original image is 1, the reflection is 1/2)
The original image, is that we saw the beginning of the picture
Spacing, is the original image and reflection between the gap, such as: Reflectiongap = 4;
The reflection is the lower half of the original image 1/2 height, through the Matrix transformation Matrix.prescale (1,-1); Get an inverted picture and then add a linear mask and shadow implementation
Reflection realization:
/** Reflection Reflection * * Public boolean createreflectedimages () {final int reflectiongap = 4;
int index = 0;
For (map<string, object> map:list) {Integer id = (integer) map.get ("image"); Bitmap originalimage = Bitmapfactory.decoderesource (Mcontext.getresources (), id);
Get the original picture int width = Originalimage.getwidth ();
int height = originalimage.getheight ();
Matrix matrix = new Matrix (); Matrix.prescale (1,-1); Picture matrix Transformation (reflection from the lower part to the top) Bitmap reflectionimage = Bitmap.createbitmap (originalimage, 0, HEIGHT/2, width, HEIGHT/2 , Matrix, false); Intercept the lower part of the original Bitmap bitmapwithreflection = Bitmap.createbitmap (width, (height + height/2), config.argb_8888) ; Create a reflection picture (height is original 3/2) Canvas Canvas = new Canvas (bitmapwithreflection); Draw Reflection (original image + spacing + reflection) Canvas.drawbitmap (originalimage, 0, 0, NULL); Drawing artwork
Paint Paint = new Paint (); Canvas.drawrect (0, height, width, height + reflectiongap, paint); Draw the spacing between the original image and the reflection Canvas.drawbitmap (reflectionimage, 0, height + reflectiongap, null);
Draw Reflection Map Paint = new paint (); LinearGradient shader = new LinearGradient (0, Originalimage.getheight (), 0, bitmapwithreflection.getheight () +
Reflectiongap, 0x70ffffff, 0X00FFFFFF, Tilemode.clamp); Paint.setshader (shader); Linear gradient effect Paint.setxfermode (new Porterduffxfermode (mode.dst_in)); Shadow mask Effect canvas.drawrect (0, height, width, bitmapwithreflection.getheight () + reflectiongap, paint);
Draw the shadow effect of the reflection imageview ImageView = new ImageView (mcontext); Imageview.setimagebitmap (bitmapwithreflection);
Set the reflection Picture Imageview.setlayoutparams (New Mygallery.layoutparams (180, 240));
Imageview.setscaletype (Scaletype.matrix); mimages[index++] = ImageView;
return true; }