【问题标题】:Resizing image to fill width of screen调整图像大小以填充屏幕宽度
【发布时间】:2014-06-01 09:07:03
【问题描述】:

我正在尝试设置从网络下载的图像。我正在使用一个名为 ion 的库来帮助我执行此操作。问题是我需要调整图像大小以适合我的屏幕并保持纵横比。高度似乎工作正常,但是我想设置位图的宽度以适应设备的整个宽度,同时保持纵横比。但它不起作用,图像两边都被剪短了......

  <ImageView
    android:id="@+id/imageView"
    android:layout_width="fill_parent"
    android:layout_height="@dimen/_height" />

代码:

DisplayMetrics metrics = getResources().getDisplayMetrics();
mWidth = metrics.widthPixels;
mHieght = (int) getResources().getDimension(R.dimen._height);
Ion.with(imageView).resize(mWidth, mHieght).load(url)

编辑: 这是android:scaleType="centerCrop"

【问题讨论】:

    标签: android android-imageview aspect-ratio android-bitmap ion-koush


    【解决方案1】:

    ImageView 具有刻度类型功能。检查ImageView.ScaleType。我认为centerInsidefitCenter 是您正在寻找的。​​p>

    更新

    抱歉,起初没有意识到您的身高是固定的。 centerCrop 应该是答案。

    【讨论】:

    • @user1163234 完全是我的错。 centerCrop
    • 我做了这个,见上图。它看起来像是在切割图像的顶部和底部......
    • 这就是预期的结果。我的意思是你不能既要保持纵横比又要能够以固定高度显示所有图像。无论是裁剪图像还是放弃宽高比。
    • 我现在明白了。谢谢!
    【解决方案2】:

    如果您知道图片的最大尺寸,您可以将布局的宽度设置为图片集的最大宽度,然后全部居中。这对我有用:

    <FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    
    <RelativeLayout
        android:layout_width="1920px"
        android:layout_height="fill_parent"
        android:layout_gravity="center">
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView"
            android:background="@drawable/your_image" />
    </RelativeLayout>
    </FrameLayout>
    

    其中 1920px 是图像集的最大宽度。 结果是可以接受的,编辑:图像完全居中。

    【讨论】:

      【解决方案3】:

      我在父布局上使用“paddingLeft”和“paddingRight”实现了这一点;同时将负值应用于子布局/ ImageView 的填充和边距。 "android:clipToPadding" 标志必须为 false 以防止剪辑。

      <LinearLayout
          ...
          android:paddingLeft="10sp"
          android:paddingRight="10sp"
          android:clipToPadding="false"
          ...>
      
          <ImageView
              android:layout_marginLeft="-10sp"
              android:layout_marginRight="-10sp"
              android:paddingRight="-10sp"
              android:paddingLeft="-10sp"
              ...>
      

      【讨论】: