前言
长假归来第一发,来学习个简单的图片倒影渐变效果
地址
目录
-
需要实现的效果
-
主要代码
-
链接
一. 需要实现的效果
二. 主要代码
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(mSourceBitmap)));
}
private Bitmap revertBitmap(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对象,图片高是原图的一半。
Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
(height + height / 2), Config.ARGB_8888); //创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍。
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, 0×70ffffff, 0×00ffffff,
TileMode.MIRROR); //创建线性渐变LinearGradient 对象。
paint.setShader(shader);
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
+ reflectionGap, paint); //画布画出反转图片大小区域,然后把渐变效果加到其中,就出现了图片的倒影效果。
return bitmapWithReflection;
}
}
三. 链接
>
>
>
>
>