Imageview没有缩放图片

时间:2017-09-30 01:22:10

标签: android android-layout imageview

我有以下imageview,其图像小于包含此ImageView的RelativeLayout。我希望图像scalled适合imageView的宽度,但我无法使其工作。比如我 将此relativeLayout设置为 350dp宽度

library(dplyr)
df = visits %>%
  left_join(scores, by = c("Subj")) %>%
  mutate(Visit = replace(Visit, !(DaysInStudy.y >= DaysInStudy.x - 6
                             & DaysInStudy.y <= DaysInStudy.x), NA)) %>%
  select(-DaysInStudy.x, -visit, -Visit, Subj, DaysInStudy = DaysInStudy.y, scores, Visit)


#Showing top 10 rows of output df: head(df, n=10)

    Subj DaysInStudy scores Visit
1    S1          -9      3   <NA>
2    S1          -8      7   <NA>
3    S1          -7      9   <NA>
4    S1          -6      6    V1
5    S1          -5      5    V1
6    S1          -4      1    V1
7    S1          -3      2    V1
8    S1          -2      8    V1
9    S1          -1      4    V1
10   S1           0      3    V1

正如您在图片中看到的那样,图像位于中心。 fitXY的问题在于宽度有效,但不会改变高度。我想要一些像 fitX 这样的东西。我也尝试了 centerInside ,但看起来一样。

enter image description here

6 个答案:

答案 0 :(得分:1)

我也会使用centerCrop或类似的。如果这对您不起作用,请检查此图像,看看您是否能找到任何有趣的内容: enter image description here

如果这不适合您,请考虑查看Android中的图片惯例: https://developer.android.com/guide/topics/graphics/2d-graphics.html

答案 1 :(得分:1)

因为您的相对布局和Imageview都有包装内容高度,所以你必须使它们匹配parent并使scaletype fitXY ..

如下代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="350dp"
    android:layout_height="match_parent"
    android:background="@drawable/selector_button_grey"
    android:clickable="true"
    android:padding="5dp">

<ImageView
    android:id="@+id/image_selector"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"
    android:background="@color/black"
    android:src="@drawable/Nachos"
     />

<TextView
    android:id="@+id/image_selector_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/image_selector"
    android:gravity="center_horizontal|center_vertical"
    android:paddingBottom="5dp"
    android:paddingLeft="5dp"
    android:textSize="18sp" />
</RelativeLayout>

答案 2 :(得分:0)

您应该将android:scaleType属性更改为ImageView。

如果要按比例显示图片,可以使用centerCrop

如果您不想按比例显示图片,可以使用fitXY

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="350dp"
                android:layout_height="wrap_content"
                android:background="@drawable/selector_button_grey"
                android:clickable="true"
                android:padding="5dp">

    <ImageView
        android:id="@+id/image_selector"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:background="@color/black"
        android:scaleType="fitXY"
        android:src="@drawable/Nachos" />

    <TextView
        android:id="@+id/image_selector_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/image_selector"
        android:gravity="center_horizontal|center_vertical"
        android:paddingBottom="5dp"
        android:paddingLeft="5dp"
        android:textSize="18sp"/>

</RelativeLayout>

答案 3 :(得分:0)

希望这有帮助! 在我的情况下它工作正常。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="350dp"
    android:layout_height="match_parent"
    android:background="@drawable/Nachos">
</RelativeLayout>

答案 4 :(得分:0)

RelativeLayout上设置了一些填充,但ImageView可能导致RelativeLayout无法触及布局android:padding="5dp" 中的边:{/ p>

删除它:

android:paddingTop="5dp"
android:paddingBottom="5dp"

如果你真的想在顶部和底部设置一些填充,而在右边和左边设置 NOT ,那么如果你想填充顶部和底部 ADD 这些:

//use some existing reference to your NavMeshAgent
NavMeshAgent agent = PlayerController.instance.GetComponent<NavMeshAgent>(); 

//This will fire when you get the error you're describing.
if (!agent.isOnNavMesh)
{
   Vector3 warpPosition; //Set to position you want to warp to
   agent.transform.position = warpPosition;
   agent.enabled = false;
   agent.enabled = true;
}

如果你根本不想要填充,请不要添加

答案 5 :(得分:0)

我使用了另一种方法。首先,我在不加载内存的情况下获得了尺寸:

   BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
                bitmapOptions.inJustDecodeBounds = true;
                try {
                    BitmapFactory.decodeStream(new FileInputStream(f), null, bitmapOptions);
                    BitmapFactory.decodeFile(f.getName(), bitmapOptions);
                    float scale = (bitmapOptions.outHeight * 1f) / (bitmapOptions.outWidth);
                    cache.put(image, value);
                } catch (Throwable e) {
                    e.printStackTrace();
                }

然后使用该值比例

    imageView.setLayoutParams(new android.widget.RelativeLayout.LayoutParams(IMAGE_SIZE, Math.round(IMAGE_SIZE * imageData.getScale())));
    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    imageView.setAdjustViewBounds(true);
    imageView.setCropToPadding(true);