Android(安卓)实现图片倒影效果
16lz
2021-01-26
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;}}
更多相关文章
- Android标题栏随滑动渐变效果的实现
- android 动态设置控件的高度,使用对应布局中的dp值
- Android中元素按比例布局
- Android开发学习之View测量的内置常用方法
- Android(安卓)获取标题栏以及状态栏的高度
- Android根据屏幕宽度,按比例缩放图片
- [转]Android(安卓)获取当前Activity的屏幕截图
- Android中判断状态栏是否存在
- 高度状态栏Android获取状态栏的高度高度状态栏