2010-11-16 137 views
14

我有一个ImageView,我希望它的大小始终相同。如果图像小于视图,我希望它在视图中居中。如果图像大于视图,那么我希望它缩小比例 - 保留宽高比。ImageView是一个固定的大小,不管图像大小

我在这过几次尝试自己 - 最近的一项是:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ImageView android:id="@+id/itemImage" android:layout_width="100dp" 
      android:layout_height="100dp" android:scaleType="fitCenter" 
      android:adjustViewBounds="true" android:gravity="center" android:padding="10px" /> 
    <TextView android:id="@+id/currentLentItem" android:layout_width="wrap_content" 
       android:layout_height="wrap_content" android:padding="10px"/> 
</LinearLayout> 

缺少什么我在这里?

+0

您是否得到了满意的解决方案? – nwaltham 2012-01-15 21:03:04

回答

11

尝试使用位阶类型centerInside,象下面这样:

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     > 
    <ImageView 
     android:id="@+id/itemImage" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_alignParentRight="true" 
     android:scaleType="centerInside" 
     android:gravity="right|center_vertical" 
     android:padding="10px" 
     /> 
    <TextView 
     android:id="@+id/currentLentItem" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@id/list_image" 
     android:padding="10px" 
     /> 
</RelativeLayout> 

这会导致图像按比例缩小仅当比布局更大,并且它会按比例缩放,以及(而fitXY缩放而不考虑方面比)。如果更小,它也会将图像居中。

编辑:我已经更新了像你想要的东西的例子。以下是改变的要点:

•ImageView引力改为right|center_vertical。既然你想让它们在右边对齐,即使它们是纵向定位图像,使用这种重力也会允许它们。

•ImageView的对齐的RelativeLayout的

•RelativeLayout的右侧设置为wrap_content因为它是用于一个ListView。

•添加了TextView,与父项左侧对齐,其右边缘由itemImage的左边缘定义。

+0

谢谢你 - 它看起来更好。尽管如此,View仍然不是一个固定的大小。从上面的示例中可以看到,ImageView紧挨着一个TextView,并且它显示在一个ListView中。我希望ImageViews的右边缘彼此排列在一起,这样一切都看起来整洁而统一...... – 2010-11-17 09:51:06

+0

Paul,我添加了一个可以尝试的更新示例;这应该让你更接近你要找的东西。 – kcoppock 2010-11-17 14:20:01

+0

谢谢。尽管如此,ImageViews的尺寸仍然不尽相同。我需要他们都是完全相同的宽度。我原以为layout_width会设置 - 但它显然不会... – 2010-11-17 16:43:52

10

如果图像超过视图大小,那么你可以使用它的规模:

android:scaleType="fitXY" 

不会给你想要的东西,如果图像较小。也许你可以在运行时检测到,并以编程方式更改scaleType。

+0

有没有办法在这些线程上“碰撞”...? – 2010-11-22 19:26:29

+0

如何在运行时更改它? – 2012-02-11 05:43:53

+0

imageView.setScaleType(ScaleType.FIT_XY); – 2015-04-07 06:16:53