Android实现图片的倒影效果
发布时间:2020-12-15 03:20:26 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import a
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.widget.ImageView; public class MainActivity extends Activity { private ImageView mRevertImageView; private Bitmap mSourceBitmap; //原图 private Bitmap mRevertBitmap; //倒立图 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRevertImageView = (ImageView)findViewById(R.id.im_revert); mSourceBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.source); mRevertImageView.setBackground(new BitmapDrawable(getResources(),revertBitmap())); } private Bitmap revertBitmap() { //1.倒立图 Matrix matrix = new Matrix(); matrix.preScale(1,-1); //以X轴向下翻转 int width = mSourceBitmap.getWidth(); int height = mSourceBitmap.getHeight(); //生成倒立图,宽度和原图一致,高度为原图的一半 mRevertBitmap = Bitmap.createBitmap(mSourceBitmap,height / 2,width,matrix,false); //2.要生成原图加上倒立图,先生成一个可变空的Bitmap,高度为原图高度的1.5倍(包括原图和倒立图的高度) int gap = 10; //间隙空白 Bitmap bitmap = Bitmap.createBitmap(width,height + height / 2,Bitmap.Config.ARGB_8888); Paint paint = new Paint(); Canvas canvas = new Canvas(bitmap); canvas.drawBitmap(mSourceBitmap,paint); //绘制原图 canvas.drawBitmap(mRevertBitmap,height + gap,paint); //绘制倒立图 //3.画笔使用LinearGradient 线性渐变渲染 LinearGradient lg = new LinearGradient(0,bitmap.getHeight(),0xabff0000,0x00ffff00,Shader.TileMode.MIRROR); paint.setShader(lg); //4.指定画笔的Xfermode 即绘制的模式(不同的模式,绘制的区域不同) paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP)); //5.在倒立图区,绘制矩形渲染图层 canvas.drawRect(0,paint); paint.setXfermode(null); return bitmap; } //缩放图片 private Bitmap resizeImage(Bitmap bitmap,int width,int height) { int originWidth = bitmap.getWidth(); int originHeight = bitmap.getHeight(); float scaleWidth = width / originWidth; float scaleHeight = height / originHeight; Matrix matrix = new Matrix(); matrix.postScale(scaleWidth,scaleHeight); Bitmap resizeBitmap = Bitmap.createBitmap(bitmap,originWidth,originHeight,true); return resizeBitmap; } } PorterDuffXfermode 定义的模式如下: private static final Xfermode[] sModes = { ?new PorterDuffXfermode(PorterDuff.Mode.CLEAR),? ? //所绘制不会提交到画布上 ?new PorterDuffXfermode(PorterDuff.Mode.SRC),? ? ? //显示上层绘制图片 ?new PorterDuffXfermode(PorterDuff.Mode.DST),? ? ?//显示下层绘制图片 ?new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER),//正常绘制显示,上下层绘制叠盖 ?new PorterDuffXfermode(PorterDuff.Mode.DST_OVER),//上下层都显示。下层居上显示 ?new PorterDuffXfermode(PorterDuff.Mode.SRC_IN),? //取两层绘制交集。显示上层 ?new PorterDuffXfermode(PorterDuff.Mode.DST_IN),? //取两层绘制交集。显示下层 ?new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT),?//取上层绘制非交集部分 ?new PorterDuffXfermode(PorterDuff.Mode.DST_OUT),?//取下层绘制非交集部分 ?new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP),//取下层非交集部分与上层交集部分 ?new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP),//取上层非交集部分与下层交集部分 ?new PorterDuffXfermode(PorterDuff.Mode.XOR),? ? ?//滤色效果 ?new PorterDuffXfermode(PorterDuff.Mode.DARKEN),? //滤色效果 ?new PorterDuffXfermode(PorterDuff.Mode.LIGHTEN),?//滤色效果 ?new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY),//滤色效果 ?new PorterDuffXfermode(PorterDuff.Mode.SCREEN) ? ?//滤色效果 }; 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- java – 显示HTML时JEditorPane是否有Charset问题
- java – jsp:如何隐藏用户的网站文件夹结构?
- Java数据结构之双端链表原理与实现方法
- java – 如何将来自不同项目的JSP文件包含到我的
- java – 为JodaTime Instant添加一些天
- java – 定义:Unfinalized与finalizable对象
- Java中使用opencsv读写csv文件示例
- Consumer和Begin方法如何在java功能接口内部工作
- oauth – Socialauth,Scribe-Java和Spring Socia
- 简介Java的Hibernate框架中的Session和持久化类
热点阅读