Domanda

Se ho impostato il mio ImageView di essere sia cliccabile e attivabile, funziona, ma non ho modo di sapere quale immagine si concentra. Qual è il modo migliore per farlo disegnare un bordo arancione intorno la vista in modo che l'utente sa che è attualmente a fuoco?

Ho cercato di farlo cadere in un LinearLayout e l'impostazione che per essere attivabile e cliccabile, invece, ma non ha avuto fortuna. Anche quando ho messo un margine su di esso, non c'è niente per indicare che è stato selezionato.

È stato utile?

Soluzione

È possibile utilizzare una drawable con un selettore come sfondo.

Per esempio, ho gallery_image_bg.xml in res / drawable:

<?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>

Questo crea tre diverse linee di colore 3DP intorno all'immagine. Sono visibili perché le forze di imbottitura l'immagine di rendering in una zona leggermente più piccolo.

Utilizzato in codice in questo modo:

image.setBackgroundResource(R.drawable.gallery_image_bg)

Altri suggerimenti

La soluzione rapida è quella di utilizzare un ascoltatore, che risponderà al click, e impostare un bordo arancione sul IMAGEVIEW ...

imageView.setOnClickListener(listener)

Ma bisogna farlo per tutti gli elementi ImageView. Almeno loro possono condividere lo stesso ascoltatore.

La soluzione a lungo è quello di implementare il proprio punto di vista, che si estende ImageView, che trae il proprio bordo arancione in risposta a un clic.

Presumo che si desidera che questo lavoro come pulsanti di opzione, dove cliccando su un ImageView rimuoverà il confine dal ImageView selezionato in precedenza? Quindi sarà necessario l'ascoltatore condiviso per mantenere un riferimento al ImageView attualmente selezionato, che possono poi essere "de-selezionato" in caso di nuove ImageView viene cliccato.

risposta in ritardo, ma si può anche utilizzare un LayerDrawable per l'origine dell'immagine. Quindi non c'è bisogno di pasticciare con lo sfondo, imbottitura, ecc.

LayerDrawable d = new LayerDrawable(new Drawable[]{new BitmapDrawable(myBmp), getResources().getDrawable(R.drawable.my_selector_list)});
imageView.setImageDrawable(d);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top