您的位置:首页 > 其它

使用BitmapShader在自定义View中画圆形

2015-09-21 14:24 344 查看
/**
* 画个圆
* Created by cold on 15/9/21.
*/
public class BitShape extends View {

private Bitmap bitmap;
private Context context;
private BitmapShader bitmapShader;
//该view为50dp的圆
private int width=50;
private int widthpx;//图片的宽度像素
private float mRadius;//圆半径
private Matrix mMatrix;//缩放矩阵
private Paint bitmapPaint;//画笔

//在构造方法中各种初始化
public BitShape(Context context) {
super(context);
this.context=context;
//设置默认显示的图片
this.bitmap=getRes("default_pic");
bitmapPaint = new Paint();
bitmapPaint.setAntiAlias(true);
mMatrix = new Matrix();
bitmapShader=new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
bitmapPaint.setShader(bitmapShader);
}

public BitShape(Context context, AttributeSet attrs) {
super(context, attrs);
this.context=context;
this.bitmap=getRes("default_pic");
bitmapPaint = new Paint();
bitmapPaint.setAntiAlias(true);
mMatrix = new Matrix();
bitmapShader=new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
bitmapPaint.setShader(bitmapShader);
}

//设置大小为50dp
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
widthpx=dp2px(width);
mRadius=widthpx/2;
setMeasuredDimension(widthpx,widthpx);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//先设置图片的缩放
float scale = 1.0f;
// 拿到bitmap宽或高的小值
int bSize = Math.min(bitmap.getWidth(), bitmap.getHeight());
scale = widthpx * 1.0f / bSize;
// shader的变换矩阵,我们这里主要用于放大或者缩小
mMatrix.setScale(scale, scale);
// 设置变换矩阵
bitmapShader.setLocalMatrix(mMatrix);
//调用.setShader方法
bitmapPaint.setShader(bitmapShader);
//画圆
canvas.drawCircle(mRadius, mRadius, mRadius, bitmapPaint);

}

//改变要绘制的bitmap
public void changeBitmap(Bitmap bitmap){
this.bitmap=bitmap;
bitmapShader=new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
//通知重绘
postInvalidate();
}

//获取Bitmap
public Bitmap getRes(String name) {
ApplicationInfo appInfo = context.getApplicationInfo();
int resID = getResources().getIdentifier(name, "drawable", appInfo.packageName);
return BitmapFactory.decodeResource(getResources(), resID);
}

public int dp2px(int dpVal)
{
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
dpVal, getResources().getDisplayMetrics());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: