获取bitmap:
privateBitmapgetBitmap(Drawable drawable){
if(drawable instanceof BitmapDrawable){ //判断drawable类型,如果是drawable直接返回
return((BitmapDrawable) drawable).getBitmap();
}else if(drawable instanceof ColorDrawable){ //如果是颜色
Rect rect=drawable.getBounds(); //获取drawable大小
intwidth=rect.right-rect.left; //宽
intheight=rect.bottom- rect.top; //高
intcolor=((ColorDrawable) drawable).getColor(); //颜色
Bitmap bitmap=Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888); //用以上参数做一个bitmap
Canvas canvas=newCanvas(bitmap);
canvas.drawARGB(Color.alpha(color),Color.red(color),Color.green(color),Color.blue(color));//使用Canves填充
return bitmap;
}else{
return null;
}
}
使用获取到的bitmap,重写onDraw()方法,调用画圆的方法而不是画方形的方法:
重写onDraw()方法到此已经是圆形了。
添加边框:
设置矩阵时不指定bitmap缩放中心会出现这种情况:
bitmap取到的部分不对给矩阵指定bitmap的缩放中心,我这里设置为bitmap的中心:
设置矩阵的缩放中心这里更正上一点的说法:后面两个参数是设置矩阵的起点,因为imageView的矩阵默认起点为左上角,因为边框占据了一定的宽度因此起点也应该往下往右移动:
正确理解为为matrix的左上角的起点 矩阵示意图图中红线交叉点的坐标为(borderWidth,borderWidth),图片左上角就是imageVIew的(0,0),如不设置坐标,默认是(0,0),效果如下
不设置坐标其实就是图片左上偏移了
是不是好看合理了许多呢
矩阵参考了(在此感谢):http://blog.csdn.net/cquwentao/article/details/51445269
网友评论