1

私は Android アプリケーションを組み込み、3 つImageViewの s を a に水平LinearLayoutに配置し、それらをaandroid:layout_width="0dp"で配置しandroid:layout_weight="1"、レイアウト内で均等に広がるようにしました。

ここで、 a を使用するように切り替える必要がありますRelativeLayout(別の画像をオーバーラップさせたいので、 a では実行できないため) 3 s を親レイアウト全体に均等に分散/スケーリングLinearLayoutするという同じ効果を複製することから始めたいと思います。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" />


注: SO でこれと同じ制約を持つ質問が見つかりません。次のような質問がいくつかあります。

Android:RelativeLayout内でコンポーネントを均等に配置する方法は? android RelativeLayout、等間隔?

しかし、詳細を調べてみるとLinearLayout、等間隔のオプションとして を考慮しておらず、レイアウト タイプの切り替えが最終的な解決策であることがわかります。私はそれを使用していましたが、画像を重ねる必要があるため、うまくいきません:

例に注意してください。基本的な形状を持つ 3 つの s がありますが、中央の形状に重なってImageViewいる 4番目(非表示で始まる) もあります。 ImageViewこれが私が使用しなければならない理由ですRelativeLayout

ここに画像の説明を入力

4

4 に答える 4

2

ここでのすべてのニーズを満たすために、元の LinearLayout に戻りたいと思うでしょう。

4 番目の画像のサイズが既存の画像の 1 つと一致する必要がある場合は、オーバーレイが必要なときにスワップする 2 つの画像を合成したリソースを作成するか、中央の ImageView を RelativeLayout に置き換えるか、 ImageView を含む FrameLayout。4 番目の画像を追加する必要がある場合は、そのレイアウトに追加します。

何かのようなもの:

<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 に答える