Android中实现倒影效果 Android中实现倒影效果

实现原理
实现倒影可以使用 OpenGL 等 3D 接口方法,也可以用 2D 的方法模拟。
用 2D 方法实现倒影需要从两个方面考虑:
倒影是上、下翻转的图像;
从上到下透明度越来越大。

图像翻转
原理上讲,图像的翻转实际就是将图像数据上下行互换。

透明度渐变
实现透明度渐变有两种方法,一是使用蒙板;二是直接修改像素数据,修改每个像素的 alpha 值。
对于蒙板法,事先做好一张透明度渐变的图,这就是我们的蒙板,在绘制完图像之后把蒙板图片绘制上去,这样就产生了透明度渐变的效果。
对于第二种方法,我们需要首先读出图片的数据,然后修改每个像素的 alpha 值。逐行增加 alpha 值,产生的效果是自上向下由暗变亮。

1
2 /**
3 *getreflectionbitmapoftheoriginalbitmap.
4 * @param srcBitmap
5 * @return
6 */
7 private BitmapmakeReflectionBitmap(BitmapsrcBitmap){
8 int bmpWidth = srcBitmap.getWidth();
9 int bmpHeight = srcBitmap.getHeight();
10 int []pixels = new int [bmpWidth * bmpHeight * 4 ];
11 srcBitmap.getPixels(pixels, 0 ,bmpWidth, 0 , 0 ,bmpWidth,bmpHeight);
12
13 // getreversedbitmap
14 BitmapreverseBitmap = Bitmap.createBitmap(bmpWidth,bmpHeight,
15 Bitmap.Config.ARGB_8888);
16 for ( int y = 0 ;y < bmpHeight;y ++ ){
17 reverseBitmap.setPixels(pixels,y * bmpWidth,bmpWidth, 0 ,
18 bmpHeight - y - 1 ,bmpWidth, 1 );
19 }
20
21 // getreflectionbitmapbasedonthereversedone
22 reverseBitmap.getPixels(pixels, 0 ,bmpWidth, 0 , 0 ,bmpWidth,bmpHeight);
23 BitmapreflectionBitmap = Bitmap.createBitmap(bmpWidth,bmpHeight,
24 Bitmap.Config.ARGB_8888);
25 int alpha = 0x00000000 ;
26 for ( int y = 0 ;y < bmpHeight;y ++ ){
27 for ( int x = 0 ;x < bmpWidth;x ++ ){
28 int index = y * bmpWidth + x;
29 int r = (pixels[index] >> 16 ) & 0xff ;
30 int g = (pixels[index] >> 8 ) & 0xff ;
31 int b = pixels[index] & 0xff ;
32
33 pixels[index] = alpha | (r << 16 ) | (g << 8 ) | b;
34
35 reflectionBitmap.setPixel(x,y,pixels[index]);
36 }
37 alpha = alpha + 0x01000000 ;
38 }
39
40 return reflectionBitmap;
41 }

参考 http://www.linuxgraphics.cn/android/reflection_effect_2d.html


更多相关文章

  1. Android补间动画详情
  2. Android延时启动效果+轮播图+点击进入+沉浸式状态栏+按钮点击颜
  3. android 设置Alpha值实现图片渐变效果
  4. 100行代码撸一个可渐变颜色的TextView
  5. Android中十六进制颜色的基本使用
  6. 【笔记】颜色渐变标签之坑爹的 @android:color/transparent
  7. Android开发之ListView页眉页脚效果VS android背景渐变
  8. Android(安卓)中自定义组件例子一(中级)
  9. [Android] android 实现加速小火箭动画效果 位移+透明渐变 动画

随机推荐

  1. Android(安卓)Scripting Environment动手
  2. Android动态获取权限(读写、获取手机状态
  3. Android学习笔记(三):Andriod程序框架
  4. android 模拟器 sdcard权限修改
  5. Android(安卓)开源项目分类汇总
  6. Android主线程、子线程通信(Thread+handle
  7. Android仿人人客户端(v5.7.1)——新鲜事之
  8. Android(安卓)CheckBox
  9. Debian 5 Android(安卓)编译
  10. Android上传文件到服务器