自定义ImageView实现圆形头像 利用Xferomede实现
来源:互联网 发布:域名在哪续费 编辑:程序博客网 时间:2024/05/22 08:04
不说废话,直接上代码,用的话直接把代码拷过去就行,不用别的配置
import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PixelFormat;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Xfermode;import android.graphics.drawable.Drawable;import android.support.annotation.Nullable;import android.support.v7.widget.AppCompatImageView;import android.util.AttributeSet;/** * @author : sLiKangli * 创建日期 : 2017/6/4. * 类的作用 : 图片显示为圆形的View */public class RoundPictureView extends AppCompatImageView { private Paint mPaint; //画笔过滤模式,显示下层 private Xfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.DST_IN); //这个控件的宽和高 private int mHeight; private int mWidth; public RoundPictureView(Context context) { this(context, null); } public RoundPictureView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public RoundPictureView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { //初始化画笔 mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(Color.WHITE); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); //得到宽和高,且必须相等 mWidth = getMeasuredWidth(); mHeight = getMeasuredHeight(); if(mWidth != mHeight){ throw new IllegalArgumentException("width and height of view required equals"); } } @Override protected void onDraw(Canvas canvas) { //保存图层,不知道为什么要这一步,不加就错 canvas.saveLayer(0, 0, mWidth, mHeight, null, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG); //得到bitmap Bitmap bitmap = drawable2Bitmap(getDrawable()); //把图片缩放到合适的比例 float xScale = (float) (mWidth*1.0/bitmap.getWidth()); float yScale = (float) (mHeight*1.0/bitmap.getHeight()); Matrix matrix = new Matrix(); matrix.setScale(xScale, yScale); //画图片 canvas.drawBitmap(bitmap, matrix, mPaint); //设置过滤模式 mPaint.setXfermode(xfermode); //画圆 canvas.drawBitmap(getRoundBitmap(), 0,0, mPaint); //必须的一步,去掉过滤模式,否则图片显示不出来 mPaint.setXfermode(null); } /** * drawable 转 bitmap */ private Bitmap drawable2Bitmap(Drawable drawable){ Bitmap bitmap = Bitmap.createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.draw(canvas); return bitmap; } /** * 画一个圆形的bitmap */ private Bitmap getRoundBitmap(){ Bitmap bitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColor(Color.WHITE); canvas.drawCircle(mWidth/2, mHeight/2, mWidth/2, paint); return bitmap; }}
阅读全文
0 0
- 自定义ImageView实现圆形头像 利用Xferomede实现
- 自定义ImageView实现圆形头像
- 自定义ImageView实现圆形头像
- Android 简易 自定义ImageView 实现圆形头像
- Android ImageView实现圆形头像
- android 自定义ImageView控件实现圆形图片-适用于用户头像
- 自定义控件实现圆形头像
- 自定义ImageView实现圆形图片
- 自定义ImageView实现圆形图像
- 自定义ImageView实现圆形图片
- Android实现自定义圆形ImageView
- android 圆形头像 自定义ImageView
- Android利用CircleImageView实现圆形头像效果
- Android实现圆形头像-使用自定义控件
- android ImageView 实现圆形图片(QQ头像)
- 自定义ImageView完成圆形头像自定义
- android自定义ImageView实现圆形图片
- Android实现自定义圆形/圆角ImageView
- 懒汉式与饿汉式
- git创建与合并分支
- ArcGIS Pro点云LAS数据相关系列---创建及浏览
- 学习笔记TF020:序列标注、手写小写字母OCR数据集、双向RNN
- 343. Integer Break
- 自定义ImageView实现圆形头像 利用Xferomede实现
- 版本回滚
- 网站优化:title,keyword,description等重要标签SEO方法
- git解决冲突
- CentOS7虚拟机开机后提示ABRT has detected 1 problem(s)…… 2017-01-06 11:02:31 标签: CentOS7 ABRT CentOS7虚拟机开机
- 单例模式的延迟加载
- 双栈计算求值表达式
- PHP7扩展开发之字符串处理
- git分支管理策略