效果如下:

主要代码如下:

public static Bitmap createReflectedImage(Bitmap originalImage) {    final int reflectionGap = 4;    int width = originalImage.getWidth();     int height = originalImage.getHeight();    Matrix matrix = new Matrix();     matrix.preScale(1, -1);    Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0,             height / 2, width, height / 2, matrix, false);    Bitmap bitmapWithReflection = Bitmap.createBitmap(width,             (height + height / 2), Config.ARGB_8888);    Canvas canvas = new Canvas(bitmapWithReflection);    canvas.drawBitmap(originalImage, 0, 0, null);    Paint defaultPaint = new Paint();     canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint);    canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);    Paint paint = new Paint();     LinearGradient shader = new LinearGradient(0,             originalImage.getHeight(), 0, bitmapWithReflection.getHeight()                     + reflectionGap, 0×70ffffff, 0×00ffffff,             TileMode.MIRROR);    paint.setShader(shader);    paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));    canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()             + reflectionGap, paint);    return bitmapWithReflection; }

解释一下:

Matrix matrix = new Matrix(); matrix.preScale(1, -1);

实现图片的反转,见Android利用Matrix简单处理图片

Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0,             height / 2, width, height / 2, matrix, false);

创建反转后的图片Bitmap对象,图片高是原图的一半。

Bitmap bitmapWithReflection = Bitmap.createBitmap(width,             (height + height / 2), Config.ARGB_8888);

创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍。

Canvas canvas = new Canvas(bitmapWithReflection);canvas.drawBitmap(originalImage, 0, 0, null);

创建画布对象,将原图画于画布,起点是原点位置。

Paint defaultPaint = new Paint(); canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint);canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

将反转后的图片画到画布中。

LinearGradient shader = new LinearGradient(0,             originalImage.getHeight(), 0, bitmapWithReflection.getHeight()                     + reflectionGap, 0×70ffffff, 0×00ffffff, 

创建线性渐变LinearGradient 对象。

canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()             + reflectionGap, paint);

画布画出反转图片大小区域,然后把渐变效果加到其中,就出现了图片的倒影效果。

附件:http://www.oschina.net/code/snippet_157182_8946

更多相关文章

  1. android实现涂鸦,保存涂鸦后的图片,清屏
  2. checkbox切换选中状态的图片
  3. android 关于图片的放大,缩小,旋转功能的实现(附源码)
  4. Android(安卓)如何加载大图片
  5. Android(安卓)PlayGame
  6. android如何往SDCard中存取图片
  7. 图片加载库Glide的使用
  8. tabcontent中scaleType的使用 图片Drawable和bitmap显示问题
  9. Android学习记录使用Gallery实现炫丽的拖动效果

随机推荐

  1. 【网工收藏必备】全网最全超详细BGP协议
  2. 【华为认证HCIA】NAT实验配置完整文档
  3. 「网工小白必备」全网最详细的网络基础分
  4. 「网工小白必备」全网最详细的网络基础知
  5. 【网工收藏必备】VLAN实验之单臂路由完整
  6. 数据挖掘竞赛指南:曾经的数据挖掘少年,如今
  7. 「网工收藏必备」100个路由基础知识大全,
  8. 双节棍「大师」鱼佬亲传武功秘籍:如何进行
  9. 惨!我做人工智能,我今天量化策略爆仓了!
  10. 「网工小白必备」全网最详细的网络基础分