Android实现镜花水月的效果
16lz
2021-01-26
效果图:
效果图参考:你不知道的Android着色器/渲染器
原理
首先说一下原理,这是一张图片A,然后通过拷贝成图片B,再把B翻转,翻转后再设置B+一个渐变色的混合,实现渐变。
代码
布局文件
编码
package com.example.customview;import android.content.Context;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.Shader.TileMode;import android.util.AttributeSet;import android.view.View;public class ReflectView extends View { private Bitmap mBitmap; private Bitmap mRefBitmap; public ReflectView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public ReflectView(Context context) { super(context, null); } public ReflectView(Context context, AttributeSet attrs) { super(context, attrs, 0); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.jpg); /** * 这是上面的那张图片A */ Matrix matrix = new Matrix(); matrix.setScale(1f, -1f); /** * 使图片上下翻转的矩阵运算 */ mRefBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true); /** * 拷贝图片A并翻转 */ Paint paint = new Paint(); LinearGradient linearGradient = new LinearGradient(0, 0, 0, mBitmap.getHeight() / 4, 0X00000000, 0XFF000000, TileMode.CLAMP); paint.setShader(linearGradient); /** * 这是使图片B渐变的渲染器 让颜色从透明-->黑色 */ Canvas canvas = new Canvas(mRefBitmap); canvas.drawRect(0, 0, mBitmap.getWidth(), mBitmap.getHeight() / 4, paint); /** * 然后开始在mRefBitmap上画出渐变效果 */ } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.clipRect(0, 0, mBitmap.getWidth(), mBitmap.getHeight() + mBitmap.getHeight() / 4); /** * 只在有效区域(宽度为图片宽度,高度为图片高度+倒影的高度)内作画,其他超出有效区域的裁剪掉 */ /** * 最后把两张图片拼接 */ canvas.drawBitmap(mBitmap, 0, 0, null); canvas.drawBitmap(mRefBitmap, 0, mBitmap.getHeight(), null); }}
更多相关文章
- Android打开手机相册获取图片路径
- Android(安卓)Webview upload 图片上传
- Android(安卓)Glide设置图片的圆角
- Android文本闪烁
- 给android imageView(图片) 添加超链接
- GitHub 上受欢迎的 Android(安卓)UI Library 整理二
- Android(安卓)异步获取网络图片Bitmap资源
- Android(安卓)stdio 3.0以上版本将图片文件存入模拟器教程
- android如何将生成的图片保存至手机相册并显示出来