提供一个Android实现图片倒影效果的工具类,很实用,先上一张图:
一、思路:
复制原资源图片,绘制原图的下一半图片,处理图片翻转,创建反方向图片,合成图片并以其为画布,将原图和倒影画在合成画布上,添加遮罩层,看一段代码:
public static Bitmap getReverseBitmapById(int resId, Context context){
//创建资源Bitmap
Bitmap sourceBitmap= BitmapFactory.decodeResource(context.getResources(),resId);
//绘制原图的下一半图片
Matrix matrix=new Matrix();
//倒影翻转
matrix.setScale(1,-1);
//创建反方向Bitmap
Bitmap inverseBitmap=Bitmap.createBitmap(sourceBitmap,0,sourceBitmap.getHeight()/2,sourceBitmap.getWidth(),sourceBitmap.getHeight()/3,matrix,false);
//合成图片
Bitmap groupbBitmap=Bitmap.createBitmap(sourceBitmap.getWidth(),sourceBitmap.getHeight()+sourceBitmap.getHeight()/3+60,sourceBitmap.getConfig());
//以合成图片为画布
Canvas gCanvas=new Canvas(groupbBitmap);
//将原图和倒影图片画在合成图片上
gCanvas.drawBitmap(sourceBitmap,0,0,null);
gCanvas.drawBitmap(inverseBitmap,0,sourceBitmap.getHeight()+50,null);
//添加遮罩
Paint paint=new Paint();
Shader.TileMode tileMode= Shader.TileMode.CLAMP;
LinearGradient shader=new LinearGradient(0,sourceBitmap.getHeight()+50,0,
groupbBitmap.getHeight(), Color.BLACK,Color.TRANSPARENT,tileMode);
paint.setShader(shader);
//这里取矩形渐变区和图片的交集
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
gCanvas.drawRect(0,sourceBitmap.getHeight()+50,sourceBitmap.getWidth(),groupbBitmap.getHeight(),paint);
return groupbBitmap;
}