Android Layout - ImageView сосредоточен, но не показывает на экране (без выделения)

StackOverflow https://stackoverflow.com/questions/3878817

Вопрос

Если я настрою свой imageView, чтобы быть кликабельным, так и сфокусированным, он работает, но у меня нет способа сказать, какое изображение сосредоточено. Какой лучший способ получить его, чтобы нарисовать оранжевую границу по мнению, чтобы пользователь знал, что он в настоящее время в фокусе?

Я попытался отбрасывать его в линеарию и настроить, чтобы быть сосредоточен и вместо этого, но не повезло. Даже когда я положил на нее маржу, нет ничего, чтобы указать, что он был выбран.

Это было полезно?

Решение

Вы можете использовать чертеж с помощью селектора в качестве фона.

Например, у меня есть Gallery_image_bg.xml в 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>

Это создает три линии разных цветных 3DP вокруг изображения. Они видны, потому что прокладка усиливает изображение, чтобы рендерировать в чуть меньшем районе.

Используется в коде, как так:

image.setBackgroundResource(R.drawable.gallery_image_bg)

Другие советы

Быстрое решение состоит в том, чтобы использовать слушатель, который ответит на щелчок и установил оранжевую границу на ImageView ...

imageView.setOnClickListener(listener)

Но вы должны сделать это для всех элементов imageView. По крайней мере, они могут поделиться тем же слушателем.

Длинное решение состоит в том, чтобы реализовать свой собственный вид, расширение ImageView, который рисует свою собственную оранжевую границу в ответ на клик.

Я предполагаю, что вы хотите, чтобы это работало как радио кнопки, где нажав на ImageView, удалит границу с ранее выбранного ImageView? Таким образом, вам понадобится общий слушатель, чтобы поддерживать ссылку на текущий выбранный ImageView, который затем может быть «выделен», когда нажат новый ImageView.

Поздний ответ, но вы также можете использовать SaylDrawable для источника изображения. Тогда вам не нужно беспокоить с фоном, прокладкой и т. Д.

LayerDrawable d = new LayerDrawable(new Drawable[]{new BitmapDrawable(myBmp), getResources().getDrawable(R.drawable.my_selector_list)});
imageView.setImageDrawable(d);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top