package mobi.xiaowu.himalaya.widget;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
/**
* Created by xiaowu on 2016/12/8.
*/
public class CircleImage extends ImageView {
private Paint paint;
private BitmapShader bitmapShader;//图片的着色器
private Matrix matrix;//图片缩放器
public CircleImage(Context context) {
this(context, null,0);
}
public CircleImage(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public CircleImage(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
//初始化
private void init() {
paint=new Paint();
paint.setAntiAlias(true);
// bitmapShader=new BitmapShader();
matrix=new Matrix();
}
// @Override
// protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// int w=MeasureSpec.getSize(widthMeasureSpec);
// int h=MeasureSpec.getSize(heightMeasureSpec);
// int wm=MeasureSpec.getMode(widthMeasureSpec);
// int hm=MeasureSpec.getMode(heightMeasureSpec);
//
// if(wm==MeasureSpec.AT_MOST)
// {
// w=100;
// }
// if(hm==MeasureSpec.AT_MOST)
// {
// h=100;
// }
// setMeasuredDimension(w,h);
// }
@Override
protected void onDraw(Canvas canvas) {
if(getDrawable()!=null)
{
BitmapDrawable dw= (BitmapDrawable) getDrawable();
Bitmap oldBitMap=dw.getBitmap();
//实例化着色器
bitmapShader=new BitmapShader(oldBitMap,
Shader.TileMode.CLAMP,Shader.TileMode.CLAMP);
int lgh=Math.min(oldBitMap.getWidth(),
oldBitMap.getHeight());
float scale=getWidth()*1.0f/lgh;
//设置缩放比例,xy
matrix.setScale(scale,scale);
bitmapShader.setLocalMatrix(matrix);
paint.setShader(bitmapShader);//设置画笔的着色器对象
canvas.drawColor(Color.WHITE);
//绘制圆形
canvas.drawCircle(getWidth()/2,getHeight()/2,lgh/2,paint);
}else {
super.onDraw(canvas);
}
}
}
自定义圆形头像
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 转载自:http://blog.csdn.net/linglongxin24/article/details/52...
- 转载请注明出处:http://blog.csdn.net/linglongxin24/article/detail...
- 效果图 简介 首先是要提一下Paint这个类的一个特效处理类PorterDuffXfermode它有点像数学集合中...
- 这几天看了项目框架里面的圆形头像,发现其实这个东西并不是很难的东西,学会了原理,无论圆形头像,五角星头像都可以实现...
- 自定义ImageView完成圆形头像自定义 前言 我们可以看到现在的好多app的头像都是圆形的,记得应该是一年之前...