效果图:

效果图

参考:你不知道的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);    }}

更多相关文章

  1. Android打开手机相册获取图片路径
  2. Android(安卓)Webview upload 图片上传
  3. Android(安卓)Glide设置图片的圆角
  4. Android文本闪烁
  5. 给android imageView(图片) 添加超链接
  6. GitHub 上受欢迎的 Android(安卓)UI Library 整理二
  7. Android(安卓)异步获取网络图片Bitmap资源
  8. Android(安卓)stdio 3.0以上版本将图片文件存入模拟器教程
  9. android如何将生成的图片保存至手机相册并显示出来

随机推荐

  1. Parcelable心得
  2. Android中向webview注入js代码
  3. Android无法自动创建USB打印机节点/dev/u
  4. Android-屏幕设备截屏
  5. android真机调试方法
  6. android 使用activity自定义下拉选择列表
  7. Android音量seekbar制作
  8. Android(安卓)OpenGL学习笔记(一)
  9. 下载android的linux内核的方法
  10. live555 for Android