1

ImageView をクリック可能かつフォーカス可能に設定すると機能しますが、どの画像がフォーカスされているかを知る方法がありません。ビューの周りにオレンジ色の境界線を描画して、ユーザーが現在フォーカスされていることを知る最良の方法は何ですか?

LinearLayout にドロップして、代わりにフォーカス可能でクリック可能に設定しようとしましたが、うまくいきませんでした。余白を入れても、選択されたことを示すものは何もありません。

4

3 に答える 3

6

セレクターを背景にドローアブルを使用できます。

たとえば、res/drawableにgallery_image_bg.xmlがあります。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
          android:constantSize="true">
  <item android:state_selected="true">
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#F9C11E"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
  <item android:state_pressed="true">
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#F9C11E"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
  <item>
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#FFF"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
</selector>

これにより、画像の周囲に3つの異なる色の3dpラインが作成されます。パディングにより画像がわずかに小さい領域にレンダリングされるため、これらが表示されます。

次のようなコードで使用されます:

image.setBackgroundResource(R.drawable.gallery_image_bg)
于 2011-03-02T07:51:37.277 に答える
0

簡単な解決策は、クリックに応答するリスナーを使用し、imageView にオレンジ色の境界線を設定することです...

imageView.setOnClickListener(listener)

ただし、すべての ImageView アイテムに対してこれを行う必要があります。少なくとも、同じリスナーを共有できます。

長い解決策は、クリックに応答して独自のオレンジ色の境界線を描画する ImageView を拡張して、独自の View を実装することです。

ImageView をクリックすると、以前に選択した ImageView から境界線が削除されるラジオ ボタンのように、これを機能させたいと思いますか? そのため、現在選択されている ImageView への参照を維持するために共有リスナーが必要になります。これは、新しい ImageView がクリックされたときに「選択解除」できます。

于 2010-10-07T23:10:03.547 に答える