BitmapShader渲染器:实现圆形图片
来源:互联网 发布:windows无法连接到cmcc 编辑:程序博客网 时间:2024/05/16 19:20
1.概述
一般来讲,我们从服务器拿到的图片都是硬生生的方形图片,在界面显示中显得生硬笨拙,因此,我们经常会将图片做一些显示效果的处理,做成圆形或圆角矩形的形式来显示,在界面呈现上显得更美观更优雅。
2.效果图
3.原理
原理其实很简单,在画布canvas上拿画笔paint画一个实心圆,在画圆的时候给画笔设置一个渲染器bitmapShader,在圆形区域内填充绘制图片即可。
ps:玩过ps仿制图章工具的同学应该对这种方式秒懂
因此我们只需要一个渲染器、一枝画笔、一张画布,至于自定义view还是在哪里实现,本文用自定义Drawable实现,让View专心做更多的事。
1.画一个实心圆:
mPaint.setAntiAlias(true);mPaint.setDither(true);mPaint.setStyle(Paint.Style.FILL);canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2, mPaint);
2.构造渲染器对象,设置图片在x轴和y轴方向上的渲染方式,有平铺、重复、镜像三种方式。
BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);mPaint.setShader(bitmapShader);
3.自定义Drawable,主要有draw(),setAlpha(),setColorFilter(),getOpacity()这些方法是必须覆写的用于控制drawable外观显示特征,还有getIntrinsicHeight()和getIntrinsicWidth()这两个方式是用于设置drawable最终显示的宽高。
package com.mydrawable.musk;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.ColorFilter;import android.graphics.Paint;import android.graphics.PixelFormat;import android.graphics.Shader;import android.graphics.drawable.Drawable;/** * Created by musk. */public class CircleDrawable extends Drawable { private Paint mPaint; private int mWidth; private Bitmap mBitmap; public CircleDrawable(Bitmap bitmap) { mBitmap = bitmap; //构造渲染器,设置横向和纵向的着色模式为平铺 BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setShader(bitmapShader); mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight()); } //绘制 @Override public void draw(Canvas canvas) { canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2, mPaint); } //设置透明度值 @Override public void setAlpha(int alpha) { mPaint.setAlpha(alpha); } //设置颜色过滤器 @Override public void setColorFilter(ColorFilter colorFilter) { mPaint.setColorFilter(colorFilter); } //返回不透明度 @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } //返回图片实际的宽高 @Override public int getIntrinsicWidth() { return mWidth; } @Override public int getIntrinsicHeight() { return mWidth; }}
4.圆形效果的应用
CircleDrawable mCd=new CircleDrawable(bitmap);view.setBackgroundDrawable(mCd);或 ImageView.setImageDrawable(mCd);
4.点击下载源码
阅读全文
0 0
- BitmapShader渲染器:实现圆形图片
- 用BitmapShader实现圆形图片
- Android使用BitmapShader图形渲染实现圆形、圆角和椭圆自定义图片View
- 使用BitmapShader实现图片的圆形、圆角
- 使用BitmapShader实现圆形,圆角图片
- Android BitmapShader 实现圆形、圆角图片
- Android Shader渲染器:BitmapShader图片渲染
- BitmapShader绘制圆形图片
- BitmapShader图片渲染
- BitmapShader实现圆形头像
- Android BitmapShader 实战 实现圆形、圆角图片
- Android BitmapShader 实战 实现圆形、圆角图片
- Android BitmapShader 实战 实现圆形、圆角图片
- Android BitmapShader 实战 实现圆形、圆角图片
- Android BitmapShader 实战 实现圆形、圆角图片
- Android BitmapShader 实战 实现圆形、圆角图片
- Android BitmapShader 实战 实现圆形、圆角图片
- Android BitmapShader 实战 实现圆形、圆角图片
- 技术文章 | Laravel/Lumen搭建服务器性能测试
- [贪心+深搜]马的回路
- Directx9学习(六)第一个小游戏
- 安装RHadoop
- wireshark监控android socket 通信
- BitmapShader渲染器:实现圆形图片
- 【DP】编辑距离
- 学习笔记20-经典面试题-求一个整数中1的个数
- 再谈java乱码:GBK和UTF-8互转尾部乱码问题分析
- HDU 3709 Balanced Number (数位DP+思维)【模板】
- JavaScriptSerializer中日期序列化问题解决方案
- 正序输入字符串,反序输出
- 删除空白页
- PBO