Android图像处理(四)Xfermode和BitmapShader
2016-06-03 15:55
465 查看
Xfermode
先画的为Dst
后画的为Src
只适用于具有alpha通道的图片
圆角矩形
画笔风格----Shader 着色器 渲染器
渐变风格
线性渐变
环形渐变
扫描渐变
组合渐变
REPEAT
MIRROR
先画的为Dst
后画的为Src
只适用于具有alpha通道的图片
圆角矩形
public class RoundRectXfermodeView extends View { private Bitmap mBitmap; private Bitmap mOut; private Paint mPaint; public RoundRectXfermodeView(Context context) { super(context); initView(); } public RoundRectXfermodeView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public RoundRectXfermodeView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(); } private void initView() { //禁用硬件加速 setLayerType(LAYER_TYPE_SOFTWARE, null); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test1); mOut = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(mOut); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); //Dst 遮罩层 canvas.drawRoundRect(0, 0, mBitmap.getWidth(), mBitmap.getHeight(), 50, 50, mPaint); mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); //Src canvas.drawBitmap(mBitmap, 0, 0, mPaint); mPaint.setXfermode(null); } @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(mOut, 0, 0, null); } }
画笔风格----Shader 着色器 渲染器
渐变风格
线性渐变
环形渐变
扫描渐变
组合渐变
REPEAT
MIRROR
public class BitmapShaderView extends View { private Bitmap mBitmap; private Paint mPaint; private BitmapShader mBitmapShader; public BitmapShaderView(Context context) { super(context); } public BitmapShaderView(Context context, AttributeSet attrs) { super(context, attrs); } public BitmapShaderView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { mPaint = new Paint(); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test); // mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); // mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test1); //拉伸 对最下面一个像素进行拉伸 mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); //重复 // mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); //镜像 MIRROR // mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR); //绑上图章 mPaint.setShader(mBitmapShader); // canvas.drawCircle(300, 200, 150, mPaint); canvas.drawCircle(600, 200, 200, mPaint); } }
相关文章推荐
- Android native code和Javascript通信
- JAV开发笔记系列--1-在MAC上利用Android Studio开发JAVA项目
- Android多个activity退出问题处理
- Picasso OOM浅谈。
- Android设置状态栏透明代码!!!!
- Android_异步加载2
- Android长按Power键弹出关机Dialog框GlobalActions解析
- 培训讲解——创建第一个工程
- Android仿外卖购物车
- Android sdk 全下载
- android 账户管理实现
- AndroidAnnotations框架详解
- Android Fragment完全解析,关于碎片你所需知道的一切
- android 系统Dialog,自定义Dialog
- Android 5.0+ 解析(六)TextInputLayout控件
- 配置android.support.v7.widget.Toolbar 搜索框样式
- Android中常用布局 (多练习) table div+css
- Android 6.0中的新技术总结
- Android快速findViewById
- Android四种方法写按钮点击事件