1

我有一个内置的 Android 应用程序,其中我有 3 ImageViews 水平放置在 a 上LinearLayout,它们被放置在 aandroid:layout_width="0dp"android:layout_weight="1"这样它们在布局中均匀分布。

现在我必须切换到使用 a RelativeLayout(因为我想重叠另一个图像并且不能用 a 来完成LinearLayout)所以我想开始复制相同的效果,让 3 ImageViews 在父布局中均匀分布/缩放,但我不确定如何实现这一目标。

我觉得我需要利用android:scaleType......也许是中心作物:

均匀缩放图像(保持图像的纵横比),使图像的两个尺寸(宽度和高度)都等于或大于视图的相应尺寸(减去填充)。

这听起来不错,但我似乎无法让它正常工作......关于如何实现ImageViews 在我RelativeLayout的 s 中的均匀分布有什么想法吗?

现在的代码片段:

<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" />


注意:我在 SO 上找不到与此问题具有相同约束的问题。有很多问题,例如:

Android:RelativeLayout 内的组件空间如何均匀?android的RelativeLayout,等间距?

但是,如果您查看详细信息,您会发现他们没有考虑将其LinearLayout作为等间距的选项,并且切换布局类型最终成为解决方案。我有,我正在使用它,但它对我不起作用,因为我需要重叠图像:

注意这个例子,我有 3 个ImageView基本形状,但我也有一个 4 ImageView(它开始隐藏),它与中间的重叠。这就是为什么我必须使用RelativeLayout

在此处输入图像描述

4

4 回答 4

2

我想你会想要回到你原来的 LinearLayout 来满足你这里的所有需求。

如果您的第四张图片的大小必须与您现有的一张图片相匹配,那么您要么想要创建一个资源,该资源是两个图片的合成资源,以便在需要覆盖时交换到该资源,或者将您的中心 ImageView 替换为 RelativeLayout 或包含 ImageView 的 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" />
于 2013-09-27T17:18:47.317 回答
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 的每个项目都是上面的膨胀布局。

于 2013-09-27T17:38:03.197 回答
1

您也可以以编程方式执行此操作并告诉它们为屏幕宽度的 33%。如果您想实现这一点,请查看DisplayMetrics每个属性。ImageView

于 2013-09-27T17:52:09.133 回答
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>
于 2013-09-27T17:03:31.977 回答