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になります。
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/9
のImageView
が作成されます。カスタム属性を使用して、柔軟性を高めることができます。
別の方法は、 この投稿 で説明されているように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); } })