我有一个内置的Android应用程序,我在ImageView
水平放置了3个LinearLayout
,它们放置了android:layout_width="0dp"
和android:layout_weight="1"
,以便他们有布局中均匀分布。
现在我必须切换到使用RelativeLayout
(因为我想重叠另一个图像而不能用LinearLayout
重叠)所以我想从复制相同的效果开始让3 ImageView
在父布局中均匀分布/缩放,但我不知道如何实现这一点。
我觉得我需要使用android:scaleType
...可能是中心作物:
均匀缩放图像(保持图像的纵横比),使图像的尺寸(宽度和高度)等于或大于视图的相应尺寸(减去填充)。
听起来不错,但我似乎无法让它正常工作...... 关于如何实现ImageView
在RelativeLayout
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal" >
<ImageView
android:id="@+id/dragcircle"
android:layout_width="wrap_content"
android:tag="circle"
android:layout_alignParentLeft="true"
android:layout_height="wrap_content"
android:adjustViewBounds="false"
android:scaleType="centerCrop"
android:src="@drawable/circle" />
<ImageView
android:id="@+id/dragsquare"
android:layout_width="wrap_content"
android:tag="square"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/dragcircle"
android:adjustViewBounds="false"
android:src="@drawable/square" />
<ImageView
android:id="@+id/dragtriangle"
android:layout_width="wrap_content"
android:tag="triangle"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/dragsquare"
android:adjustViewBounds="false"
android:src="@drawable/triangle" />
之间传播的任何想法
现在的代码片段:
LinearLayout
注意:我在SO上找不到与此问题相同的约束问题。有很多问题,如:
Android: how evenly space components within RelativeLayout? 和 android RelativeLayout, equal spacing?
但是如果你查看详细信息,你会发现他们是那些没有考虑ImageView
作为等间距选项的人,而切换布局类型最终成为解决方案。我有,我正在使用它,但不对我有用,因为我需要重叠图像:
注意这个例子,我有3个基本形状的ImageView
,但我还有一个4 th RelativeLayout
(它开始隐藏),它与中间的重叠。这就是我必须使用{{1}}
答案 0 :(得分:2)
我想你会想回到原来的LinearLayout来满足你的所有需求。
如果您的第四张图片的大小必须与您现有的图片之一匹配,那么您要么创建一个资源,该资源是两个图片的组合,以便在需要重叠时替换或替换您的中心ImageView包含ImageView的RelativeLayout或FrameLayout。当您需要添加第四个图像时,将其添加到该布局。
类似的东西:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/dragcircle"
android:layout_width="0dp"
android:layout_weight="1"
android:tag="circle"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:src="@drawable/circle" />
<FrameLayout
android:id="@+id/centerimagewrapper"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1" >
<ImageView
android:id="@+id/dragsquare"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:tag="square"
android:src="@drawable/square" />
<ImageView
android:id="@+id/arrow"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/arrow"
android:visibility="invisible" />
</FrameLayout>
<ImageView
android:id="@+id/dragtriangle"
android:layout_width="0dp"
android:layout_weight="1"
android:tag="triangle"
android:layout_height="wrap_content"
android:src="@drawable/triangle" />
答案 1 :(得分:1)
您可以隐藏要放在现有图像上的图标,并保留以前的LinearLayout来实现此目的。 LinearLayout的每个组件都是自定义布局(膨胀):
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
>
<ImageView
android:id="@+id/img"
android:layout_width="100dip"
android:layout_height="100dip"
android:layout_centerInParent="true"
android:scaleType="fitXY"
android:background="@android:color/transparent"
android:src="img1_src"
/>
<ImageView
android:id="@+id/imgOverlap"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_centerInParent="true"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:background="@android:color/transparent"
android:src="img2_src"
android:visibility="gone"
/>
</RelativeLayout>
似乎无法在RelativeLayout中使用“layout_weight”。 您还可以考虑使用GridView并设置其列数; GridView的每个项目都是上面的膨胀布局。
答案 2 :(得分:1)
您也可以以编程方式进行操作并告诉他们占屏幕宽度的33%。如果您想实现此目标,请查看DisplayMetrics
以及每个ImageView
的属性。
答案 3 :(得分:0)
试试这个
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/dragcircle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:scaleType="fitXY"
android:src="@drawable/circle"
android:tag="circle" />
<ImageView
android:id="@+id/dragtriangle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:src="@drawable/triangle"
android:scaleType="fitXY"
android:tag="triangle" />
<ImageView
android:id="@+id/dragsquare"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/dragtriangle"
android:layout_toRightOf="@id/dragcircle"
android:src="@drawable/square"
android:scaleType="fitXY"
android:tag="square" />
</RelativeLayout>