我有一些矩形图像,我试图在没有失真的情况下裁剪成圆形的ImageView。我已经创建了一个自定义ImageView,这里是onDraw()方法
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (drawable == null) {
return;
}
if (getWidth() == 0 || getHeight() == 0) {
return;
}
Bitmap b = ((BitmapDrawable) drawable).getBitmap();
Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);
int w = getWidth(), h = getHeight(), radius = 0;
if (w < h) {
radius = w;
} else {
radius = h;
}
Bitmap roundBitmap = getCroppedBitmap(bitmap, radius);
if (w < h) {
canvas.drawBitmap(roundBitmap, 0, (float)(h-w)/2, null);
} else {
canvas.drawBitmap(roundBitmap, (float)(w-h)/2, 0, null);
}
}
所有这一切,都非常适合裁剪位图,最短边作为我的半径。但是,布局中的实际图像视图是保持矩形大小,并根据图像方向使用额外的填充来拧紧我的布局的其余部分。
如果我的图像是40x80,我希望将图像裁剪为半径40,宽度缩小到40x40平方。 80x40相同。
我试图调用setScaleX或setScaleY,但它需要API 11,我现在需要支持回2.3。是否有另一种强制布局视图的方法。