所以,我完成了here的回答,所以它可以解決我的問題。
XML:
<RoundedThumb
android:layout_width="match_parent"
android:layout_height="match_parent"/>
JAVA:
public class RoundedThumb extends ImageView {
private final float radius = getContext().getResources().getDimension(R.dimen.corner_radius);
private RectF mSrcRect = new RectF();
private RectF mDstRect = new RectF();
private Path mClipPath = new Path();
public RoundedThumb(Context context) {
super(context);
}
public RoundedThumb(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RoundedThumb(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
protected void onDraw(Canvas canvas) {
if (getDrawable() != null && getImageMatrix() != null) {
mSrcRect.set(0, 0, getDrawable().getIntrinsicWidth(), getDrawable().getIntrinsicHeight());
getImageMatrix().mapRect(mDstRect, mSrcRect);
mClipPath.reset();
mClipPath.addRoundRect(mDstRect, radius, radius, Path.Direction.CW);
canvas.clipPath(mClipPath);
}
super.onDraw(canvas);
}
}
與用法:
thumb.setScaleType(ImageView.ScaleType.FIT_CENTER);
Bitmap thumbnail = BitmapFactory.decodeFile(path);
thumb.setImageBitmap(thumbnail);
所以,現在矩形的路徑轉化就像BitmapDrawable內的ImageView,始終準確地周圍包圍ImageView中的任何位圖。對我來說重要的是 - ImageView仍然具有aspectRatio 16/9,並在資源中定義它的位置。但是位圖有四捨五入的邊框,但沒有修改。
UPD1:我有點困惑:不幸的是在某些設備上clipPath方法沒有效果(SII)甚至崩潰(舊的華碩變壓器)。可以通過將hardwareAccelerated
設置爲false
來完全修復。但是,該死的,這是不好的=/
與hardwareAccelerated真相同:( – Marabita
最後我從資源中刪除hardwareAccelerated,只是放在try/catch onDraw。 – mjollneer