package org.yang.android.util.graphics;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.LinearGradient;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PorterDuffXfermode;import android.graphics.Bitmap.Config;import android.graphics.PorterDuff.Mode;import android.graphics.Shader.TileMode;public class ReflectionImage{public static int reflectionGap;public static int reflectImageHeight;public static Bitmap doReflection(Bitmap originalBitmap){if (originalBitmap == null){return null;}// 获取原图片的宽度和高度int width = originalBitmap.getWidth();int height = originalBitmap.getHeight();if (ReflectionImage.reflectImageHeight == 0){ReflectionImage.reflectImageHeight = height / 3;}// 图片缩放,x轴变为原来的1倍,y轴为-1倍,实现图片的反转Matrix matrix = new Matrix();matrix.preScale(1, -1);// 创建反转后的图片Bitmap对象,高度为 ReflectionImage.reflectImageHeightBitmap reflectionBitmap = Bitmap.createBitmap(originalBitmap, 0,ReflectionImage.reflectImageHeight, width,ReflectionImage.reflectImageHeight, matrix, false);// 创建标准的Bitmap对象,宽和原图一致,高度为( 原图与倒影图的间距+倒影图的高度+原图的高度)Bitmap withReflectionBitmap = Bitmap.createBitmap(width,(height + ReflectionImage.reflectImageHeight + ReflectionImage.reflectionGap),Config.ARGB_8888);// 创建一个画面,以 withReflectionBitmap 为模板Canvas canvas = new Canvas(withReflectionBitmap);// 从上到下,先画原图canvas.drawBitmap(originalBitmap, 0, 0, null);// 因为 drawRect需要一个Paint画笔对象为参数,这里创建的是一个默认的Paint对象Paint defaultPaint = new Paint();// 再画间距canvas.drawRect(0, height, width, height+ ReflectionImage.reflectionGap, defaultPaint);// 最后画倒影图canvas.drawBitmap(reflectionBitmap, 0, height + reflectionGap, null);Paint paint = new Paint();// 这里用 LinearGradient 以实现倒影图的渐变效果LinearGradient shader = new LinearGradient(0,originalBitmap.getHeight(), 0,withReflectionBitmap.getHeight(), 0x70ffffff, 0x00ffffff,TileMode.MIRROR);paint.setShader(shader);paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));// 覆盖效果canvas.drawRect(0, height, width, withReflectionBitmap.getHeight(),paint);return withReflectionBitmap;}}

更多相关文章

  1. Android标题栏随滑动渐变效果的实现
  2. android 动态设置控件的高度,使用对应布局中的dp值
  3. Android中元素按比例布局
  4. Android开发学习之View测量的内置常用方法
  5. Android(安卓)获取标题栏以及状态栏的高度
  6. Android根据屏幕宽度,按比例缩放图片
  7. [转]Android(安卓)获取当前Activity的屏幕截图
  8. Android中判断状态栏是否存在
  9. 高度状态栏Android获取状态栏的高度高度状态栏

随机推荐

  1. OCP 071中文考试题库-第2题
  2. Python英语-Issue02
  3. Matplotlib小册子:饼图概览
  4. Python英语 - Issue12
  5. Python英语-Issue03
  6. 3天破9亿!上万条评论解读《西虹市首富》是
  7. 2021年春招,Java后端最全面试攻略,吃透25个
  8. Pandas小册子:根据条件创建新的列
  9. 在pfSense中强制使用Pi-hole过滤广告
  10. Python英语-Issue06