Android实现图片的倒影效果
发布时间:2020-05-24 21:50:33 所属栏目:Java 来源:互联网
导读:Android实现图片的倒影效果
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。
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) //滤色效果 }; 以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
