1

電話ギャラリーから画像を持っているだけです。それらのほとんどは、縦長(高さ>幅)または横長(幅>高さ)のいずれかです。

各写真を正方形で表示したい 各画像は、それを入れる予定のイメージビューよりも大きいです。それでいいです。画像をトリミングして中央に配置したい

imageview scaleType を使用しています

FitXY

それは私が望むもの、正方形を提供しますが、アスペクト比を維持しないため、画像が歪んで見えます。

だから私は使う

centerCrop

縦横比は維持されますが、画像ビューはもはや正方形ではありません (縦横比が維持されているため)

私が欲しいのはcenterCrop + fitXYの両方だと思います。つまり、縦横比を維持した正方形の画像が欲しいです

これどうやってするの?

4

1 に答える 1

0

ImageView画像の高さ/幅を独自のものとして使用し、幅/高さを調整してアスペクト比を維持するカスタムを作成できます。

次のようにオーバーライドonMeasureします。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    Drawable d = getDrawable();

    if (d != null) {
        // ceil not round - avoid thin vertical gaps along the left/right edges
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = (int) Math
                .ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth());
        setMeasuredDimension(width, height);
    } else {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

この onMeasure を使用した ImageView は、画像を幅に合わせて拡大し、高さを調整して画像の縦横比を維持します。幅と同じ高さを設定して、正方形の画像を取得することもできます。

関連する可能性があるもの: Android ImageView で親の高さを調整し、幅を合わせる

于 2013-06-16T08:00:28.127 に答える