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);

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


更多相关文章

  1. 兼容android Q存图片到相册
  2. android layer-list
  3. Android通知栏图标显示网络图片
  4. android 获取音乐文件的内置专辑图片
  5. android ImageUtils 图片处理工具类
  6. Android自动播放图片功能实现
  7. android拼接多张bitmap图片
  8. Android手机开发:图片的放大和缩小显示ImageView
  9. android Draw Rect 坐标图示

随机推荐

  1. Android Twitter分享,即Twitter授权Oauth
  2. 配置Android(安卓)SDK 开发环境
  3. Android UI目录
  4. Android 实现从网络上异步加载图像
  5. android layout_weight讲解
  6. android 中 application 的使用
  7. Drawable Mutations(Android Drawable 深
  8. Android Studio 解决错误 Could not find
  9. Android Drawable Resource学习(二)、Bitma
  10. [置顶] Android 65K问题之Multidex原理分