Android Gallery 3D效果

在看了iOS上面的CoverFlow后,感觉效果真的不错,就想在Android上面实现一个,这个程序在网上参考了一此核心的代码,当然我添加了一些其他的东西,废话不多说,先看效果,不然就是无图无真相。

Demo下载:GalleryFlow

免费下载地址在

用户名与密码都是

具体下载目录在 /2013年资料/4月/22日/Android Gallery 3D效果

Android Gallery 3D效果

其实实现这个效果很简单,下面作一个简单的介绍

一,创建倒影效果

这个基本思路是:

1,创建一个源图一样的图,利用martrix将图片旋转180度。这个倒影图的高是源图的一半。

Matrix matrix = new Matrix();

// 1表示放大比例,不放大也不缩小。
// -1表示在y轴上相反,即旋转180度。
matrix.preScale(1, -1);

Bitmap reflectionBitmap = Bitmap.createBitmap(
    srcBitmap,
    0,
    srcBitmap.getHeight() / 2,  // top为源图的一半
    srcBitmap.getWidth(),      // 宽度与源图一样
    srcBitmap.getHeight() / 2,  // 高度与源图的一半
    matrix,
    false);

2,创建一个最终效果的图,即源图 + 间隙 + 倒影。

final int REFLECTION_GAP = 5;

Bitmap bitmapWithReflection = Bitmap.createBitmap(
      reflectionWidth,
      srcHeight + reflectionHeight + REFLECTION_GAP,
      Config.ARGB_8888);

3,依次将源图、倒影图绘制在最终的bitmap上面。

// Prepare the canvas to draw stuff.
Canvas canvas = new Canvas(bitmapWithReflection);
           
// Draw the original bitmap.
canvas.drawBitmap(srcBitmap, 0, 0, null);
           
// Draw the reflection bitmap.
canvas.drawBitmap(reflectionBitmap, 0, srcHeight + REFLECTION_GAP, null);

4,创建LinearGradient,从而给定一个由上到下的渐变色。

Paint paint = new Paint();
paint.setAntiAlias(true);
LinearGradient shader = new LinearGradient(
0,
srcHeight,
0,
bitmapWithReflection.getHeight() + REFLECTION_GAP,
0x70FFFFFF,
0x00FFFFFF,
TileMode.MIRROR);
paint.setShader(shader);
paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.DST_IN));

// Draw the linear shader.
canvas.drawRect(
0,
srcHeight,
srcWidth,
bitmapWithReflection.getHeight() + REFLECTION_GAP,
paint);

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2475baf7585ea79e6f088ce969a8bd09.html