歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android Gallery 3D效果

Android Gallery 3D效果

日期:2017/3/1 9:58:13   编辑:Linux編程

在看了iOS上面的CoverFlow後,感覺效果真的不錯,就想在Android上面實現一個,這個程序在網上參考了一此核心的代碼,當然我添加了一些其他的東西,廢話不多說,先看效果,不然就是無圖無真相。

Demo下載:GalleryFlow

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2013年資料/4月/22日/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);

Copyright © Linux教程網 All Rights Reserved