Android中创建倒影效果的工具类
来源:互联网 发布:pyqt linux 安装 arm 编辑:程序博客网 时间:2024/04/30 19:23
一、有时候我们需要创建倒影的效果,我们接触最多的都是图片能够创建倒影,而布局依然可以创建倒影。
二、工具类代码
import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.Canvas;import android.graphics.LinearGradient;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PorterDuff.Mode;import android.graphics.PorterDuffXfermode;import android.graphics.Shader.TileMode;import android.view.View;/** * 创建图片倒影的方法 * * @author * */public class ImageReflect { private static int reflectImageHeight = 90;//倒影的高度 //转化为bitmap public static Bitmap convertViewToBitmap(View paramView) { paramView.measure(View.MeasureSpec.makeMeasureSpec(0, 0), View.MeasureSpec.makeMeasureSpec(0, 0)); paramView.layout(0, 0, paramView.getMeasuredWidth(), paramView.getMeasuredHeight()); paramView.buildDrawingCache(); return paramView.getDrawingCache(); } public static Bitmap createCutReflectedImage(Bitmap paramBitmap, int paramInt) { int i = paramBitmap.getWidth(); int j = paramBitmap.getHeight(); Bitmap localBitmap2 = null; if (j <= paramInt + reflectImageHeight) { localBitmap2 = null; } else { Matrix localMatrix = new Matrix(); localMatrix.preScale(1.0F, -1.0F); // System.out.println(j - reflectImageHeight - // paramInt); Bitmap localBitmap1 = Bitmap.createBitmap(paramBitmap, 0, j - reflectImageHeight - paramInt, i, reflectImageHeight, localMatrix, true); localBitmap2 = Bitmap.createBitmap(i, reflectImageHeight, Bitmap.Config.ARGB_8888); Canvas localCanvas = new Canvas(localBitmap2); localCanvas.drawBitmap(localBitmap1, 0.0F, 0.0F, null); LinearGradient localLinearGradient = new LinearGradient(0.0F, 0.0F, 0.0F, localBitmap2.getHeight(), -2130706433, 16777215, TileMode.CLAMP); Paint localPaint = new Paint(); localPaint.setShader(localLinearGradient); localPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); localCanvas.drawRect(0.0F, 0.0F, i, localBitmap2.getHeight(), localPaint); if (!localBitmap1.isRecycled()) localBitmap1.recycle(); System.gc(); } return localBitmap2; } public static Bitmap createReflectedImage(Bitmap paramBitmap, int paramInt) { int i = paramBitmap.getWidth(); int j = paramBitmap.getHeight(); Bitmap localBitmap2; if (j <= paramInt) { localBitmap2 = null; } else { Matrix localMatrix = new Matrix(); localMatrix.preScale(1.0F, -1.0F); Bitmap localBitmap1 = Bitmap.createBitmap(paramBitmap, 0, j - paramInt, i, paramInt, localMatrix, true); localBitmap2 = Bitmap.createBitmap(i, paramInt, Bitmap.Config.ARGB_8888); Canvas localCanvas = new Canvas(localBitmap2); localCanvas.drawBitmap(localBitmap1, 0.0F, 0.0F, null); LinearGradient localLinearGradient = new LinearGradient(0.0F, 0.0F, 0.0F, localBitmap2.getHeight(), -2130706433, 16777215, TileMode.CLAMP); Paint localPaint = new Paint(); localPaint.setShader(localLinearGradient); localPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); localCanvas.drawRect(0.0F, 0.0F, i, localBitmap2.getHeight(), localPaint); } return localBitmap2; } 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, 0x70ffffff, 0x00ffffff, TileMode.MIRROR); paint.setShader(shader); paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint); return bitmapWithReflection; }}
三、这里面有很多种方法,可以自己根据需求去选择。
调用示例:
ps:我这是创建多个倒影,所以用了一个for循环。循环操作的是两个图片数组。
for (int k = 0; k < REFLECT_COUNT; k++) { arrayOfImageView[k].setImageBitmap(ImageReflect.createCutReflectedImage(ImageReflect.convertViewToBitmap(imagereflect[k]), 0)); }
0 0
- Android中创建倒影效果的工具类
- [Android]倒影效果的ImagView
- Android 倒影绘制-工具类
- android 中实现图片倒影效果
- Android Studio中实现图片倒影效果
- Android实现图片的倒影效果
- Android实现图片的倒影效果
- Android实现图片的倒影效果分析
- Android:实现图片的倒影效果
- android显示TextView文字的倒影效果
- android显示TextView文字的倒影效果
- Android实现图片的倒影效果
- Android显示TextView文字的倒影效果
- Android 图片倒影效果
- Android生成倒影效果
- Android 倒影效果
- android 图片倒影效果
- Android 图片倒影效果
- 适配器模式
- APP应用定制开发流程及时间
- Oracle Exadata数据库云服务器X4-8
- iOS之statusBar状态栏
- IICvs SPI
- Android中创建倒影效果的工具类
- 多机调度问题
- spring aop(九)--使用DefaultAdvisorAutoProxyCreator创建代理
- 近世代数【第一章 群】1 群的概念
- 关于MDK(KELI)下stlink仿真不能实时更新数据的解决方法
- myeclipse运行tomcat自动运行debug模式
- WINDOWS7 : Oracle Database 11g 未在当前操作系统中经过认证
- 求JAVA初级开发职位
- enable_shared_from_this模板类使用完全解析