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 获取音乐文件的内置专辑图片
  2. Android通知栏图标显示网络图片
  3. 兼容android Q存图片到相册
  4. Android手机开发:图片的放大和缩小显示ImageView
  5. android拼接多张bitmap图片
  6. Android自动播放图片功能实现
  7. Android Glide设置图片圆角,亲测有效

随机推荐

  1. Android数据适配-ExpandableListView
  2. Android "无法查看***。请释放部分手机内
  3. 【小米招聘]】Android系统软件测试工程师
  4. 使用Jenkins自动构建Android问题总结
  5. 【Android Developers Training】 2. 运
  6. Android ViewPager+Fragment 实现画廊效
  7. android:自定义actionbar样式和布局
  8. 郭霖公众号的文章连接
  9. Android多线程分析之三:Handler,Looper的实
  10. android 点击重新加载界面设计