代码之家  ›  专栏  ›  技术社区  ›  MeCe

使用滑动和更改纵横比加载图像

  •  6
  • MeCe  · 技术社区  · 6 年前

    我有一个imageview,我想加载一个带有Glide的图像。这里的问题是,根据16:9的纵横比,我希望所有图像具有相同的高度(width match\u 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,但没有成功。

    因此,我认为我应该在将位图加载到imageview之前使用Glide来调整位图,但我找不到关于这方面的教程。

    如何以宽高比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。

    2 回复  |  直到 5 年前
        1
  •  10
  •   ADM    3 年前

    一种方法是使用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);
        }
    }
    

    这将使 ImageView 硬编码比率为 16/9 . 您可以对其使用自定义属性,使其更加灵活。

    更新时间:- 现在使用 ConstraintsLayout 很容易打破视图的比例。你可以试试下面的内容。

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/expandableModes"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintDimensionRatio="16:9"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
     </androidx.constraintlayout.widget.ConstraintLayout>
    
        2
  •  0
  •   Eselfar    6 年前

    另一种方法是使用 SimpleTarget<> 如中所述 this post . 然后,可以根据当前图像的大小调整图像大小。

    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);
        }
    
    })