Android中创建倒影效果的工具类
一、有时候我们需要创建倒影的效果,我们接触最多的都是图片能够创建倒影,而布局依然可以创建倒影。
二、工具类代码
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));
}
Android中创建倒影效果的工具类的更多相关文章
- 转--Android中调用webservice的工具类
最近学习WebService,感觉利用这个借口开发网站的Android客户端方便及了,用到一个工具类,这里铭记一下. public static final String WebServiceName ...
- Android中经常使用的工具类02
1.读取手机联系人信息 一般用在读取手机通讯录上传,这一块比較多. import java.util.ArrayList; import java.util.List; import android. ...
- 获取全局上下文(getApplicationContext)_创建Shared Preference工具类_实现自动登录
获取全局上下文(getApplicationContext)_创建Shared Preference工具类_实现自动登录 ===========================获取全局上下文(getA ...
- Android DevArt5:如何在Android中创建多线程?
本篇内容: 如何在Android中创建多进程?查看进程的三种方式有哪些? 多进程模式的运行机制?- 演示了多进程出现问题中的两种情况: 静态成员失效 Application多次创建 IPC基础概念介绍 ...
- Android中创建PopupMenu弹出式菜单
之前写过一篇创建option menu的文章:Android中创建option menu 本文主要是讲如何创建PopupMenu弹出式菜单 1.首先创建menu文件menu2.xml: <?xm ...
- Hutool中那些常用的工具类和方法
Hutool中那些常用的工具类和方法 Hutool是一个Java工具包,它帮助我们简化每一行代码,避免重复造轮子.如果你有需要用到某些工具方法的时候,不妨在Hutool里面找找,可能就有.本文将对Hu ...
- 编写Java程序,创建一个数学工具类,将该类设计为final类,Final 修饰符的使用。
返回本章节 返回作业目录 需求说明: 创建一个数学工具类. 将该类设计为final类. 将该类的构造方法的访问权限定义为私有,以防止外界实例化该类. 在该类定义静态double类型常量π,其值为3.1 ...
- 获取Spring容器中Bean实例的工具类(Java泛型方法实现)
在使用Spring做IoC容器的时候,有的类不方便直接注入bean,需要手动获得一个类型的bean. 因此,实现一个获得bean实例的工具类,就很有必要. 以前,写了一个根据bean的名称和类型获取b ...
- commons-collections包中的常用的工具类
commons-collections包中的常用的工具类 <dependency> <groupId>commons-collections</groupId> & ...
随机推荐
- Asp.Net验证控件浅析
ASP.NET公有六种验证控件,分别如下: 控件名 功能描叙 RequiredFieldValidator(必须字段验证) 用于检查是否有输入值 CompareValidato ...
- kendoui仪表盘和柱状图 示例
一说到kendeodui我相信大家一定不陌生,这套js在画图方面效果也不错. 现在来看一看 仪表盘和柱状图的效果吧: html和js代码如下: <!DOCTYPE html> <ht ...
- iOS开发-UIActivityIndicatorView简单使用
软件开发的时候经常会遇到半天才加载出来数据的情况,不管是程序写的烂,还是说本来网速比较慢,一般都都会给个提示让用户感觉到我们在努力的加载数据,iOS可以通过UIActivityIndicatorVie ...
- SQL SERVER 的用户数,连接,连接池 license
SQL SERVER 理论上有32767个逻辑连接,SQL SERVER根据系统自行调配连接池. 首先 ,操作系统的用户数:即同时通过网络连接到这台电脑上面的用户限制,以5用户操作系统,搭建的文件服务 ...
- a标签置灰不可点击
a标签的title属性可以实现鼠标放上去显示信息的功能 <a title="编辑" href ="javascript:return false;" on ...
- 解决THINKCMF后台文章的相册图集只能上传一个图片的问题
遇到的问题: 最近使用了THINKCMF给客户开发了一个企业网站,客户在使用了一段时间后打电话说后台文章编辑页面有问题 经过沟通过知道,在后台文章编辑和添加页面相册图集每次只能上传一张图片 在跟客 ...
- Managed C++ dll: #define _AFXDLL or do not use /MD[ d]?
[问题] Hello all I'm writing a managed C++ dll with will be acting as an intermediate between a lo ...
- 这次要好好吐槽下idea呢还是SpringMVC ?
特么的!(我为什么要骂脏话,因为这个问题弱智+不能理解) 相信很多人遇到过 org.springframework.web.servlet.PageNotFound - No mapping foun ...
- PHP Manager for IIS
SOAP error on IIS8 Registering new PHP version sets bad values set for FastCGI activityTimeout, requ ...
- Python编程工具pycharm的使用
简介 俗话说工欲善其事必先利其器,所以对于程序员来说,使用python编程必须有一个强大的Python编程工具,这款工具就是pycharm. PyCharm是一种Python IDE,带有一整套可以帮 ...