web-dev-qa-db-ja.com

グライドで画像を読み込み、アスペクト比を変更する

Imageviewがあり、Glideを含む画像をロードしたいと思います。ここで重要なのは、16:9のアスペクト比に従って、すべての画像の高さ(幅match_parent)を同じにすることです。

<ImageView
  Android:id="@+id/thumbImage"
  Android:layout_width="match_parent"
  Android:layout_height="wrap_content"
  Android:adjustViewBounds="true"
  Android:contentDescription="@string/thumbnail_text"
  Android:scaleType="fitCenter"
  Android:src="@drawable/thumbnail_default"
  Android:cropToPadding="true"

  app:layout_constraintStart_toStartOf="parent"
  app:layout_constraintTop_toTopOf="parent"
  app:layout_constraintBottom_toTopOf="@id/thumbTitle"/>

グライドコード

Glide.with(mThumb.getContext())
          .load(getThumbUrl())
          .into(mThumb);

アスペクト比16:9の画像を読み込むと、すべてが素晴らしいです。ただし、別の画像を読み込むと、高さが画像の高さに調整されます。

制約レイアウトの寸法比を追加してみました

app:layout_constraintDimensionRatio="16:9"

AdjustViewBoundsとscaleTypeを試してみましたが、成功しませんでした。

したがって、イメージビューにロードする前にビットマップを調整するためにGlideで遊ぶ必要があると思いますが、それに関するチュートリアルが見つかりませんでした。

幅match_parentと高さがアスペクト比16:9として計算された画像を表示するにはどうすればよいですか?

ありがとうございました、

注:試しました

<ImageView
                Android:id="@+id/thumbImage"
                Android:layout_width="match_parent"
                Android:layout_height="0dp"
                Android:adjustViewBounds="true"
                Android:contentDescription="@string/thumbnail_text"
                Android:scaleType="centerCrop"
                Android:src="@drawable/thumbnail_default"
                Android:cropToPadding="true"
                app:layout_constraintDimensionRatio="H,16:9"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toTopOf="@id/thumbTitle"/>

動作しますが、向きを変えると高さが0になります。

6
MeCe

1つの方法は、16:9の比率の画像ビューを使用することです。

public class CustomImageView extends AppCompatImageView {
    public CustomImageView(Context context) {
        super(context);
    }

    public CustomImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int width = getMeasuredWidth();
        int height=(width * 9) / 16;
        setMeasuredDimension(width, height);
    }
}

これにより、ハードコード比率が16/9ImageViewが作成されます。カスタム属性を使用して、柔軟性を高めることができます。

7
ADM

別の方法は、 この投稿 で説明されているようにSimpleTarget<>を使用することです。次に、現在の画像のサイズに基づいて画像のサイズを変更できます。

Glide.with(context).load(url).asBitmap().into(new SimpleTarget<Bitmap>{

    @Override
    public void onResourceReady(Bitmap resource,GlideAnimation<? extends Bitmap>(){
           // resize the bitmap
           bitmap = resize(width,height);
           // set the image to the imageView
           imageView.setImageBitmap(bitmap);
    }

})
0
Eselfar