Как сделать эффект flash при нажатии на сложный LinearLayout, как при нажатии на элемент ListView? - PullRequest
1 голос
/ 16 марта 2012

У меня есть какой-то ListView. Все элементы в нем имеют форму прямоугольника, но верхний имеет закругленные углы, как показано на этой фотографии. Чтобы создать его, я обрезал верхнюю полосу углами и сохранил ее как item_bg_white_top изображение, а полосу высотой 1px сохранил как item_bg_white_line image. И вот как я это построил.

Я хочу сделать эффект flash при нажатии на ltest макет, как при нажатии на элемент ListView.

Как я могу это сделать?

Я попробовал приведенный ниже код на ltest, но это не помогло. Когда я попробовал этот код на ltest_inner, он просто изменил свой фон на черный.

final LinearLayout ll = (LinearLayout)findViewById(R.id.ltest);     
    ll.setOnClickListener(new View.OnClickListener() {         
        public void onClick(View v) {               
            ll.setBackgroundResource(android.R.drawable.list_selector_background);               
        }
    });

item.xml

<?xml version="1.0" encoding="utf-8"?>
            <LinearLayout
                android:id="@+id/ltest"
                android:layout_width="300dp"
                android:layout_height="33dp" 
                android:orientation="vertical">

                <LinearLayout
                    android:id="@+id/ltest_inner"
                    android:layout_width="300dp"
                    android:layout_height="8dp"                  
                    android:background="@drawable/item_bg_white_top" />

                <LinearLayout
                    android:layout_width="300dp"
                    android:layout_height="25dp" 
                    android:background="@drawable/item_bg_white_line_repeat" >
                </LinearLayout>
            </LinearLayout>

item_bg_white_line_repeat.xml

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/item_bg_white_line"
    android:tileMode="repeat" />

1 Ответ

0 голосов
/ 16 марта 2012

То, что вы хотите сделать, это настроить селектор и использовать его как фон для рисования для фона.

Создайте XML-файл в вашей папке для рисования и добавьте в него селектор:

<?xml version="1.0" encoding="utf-8"?>
      <selector xmlns:android="http://schemas.android.com/apk/res/android">
          <item android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/disabled_pressed_image" />
          <item android:state_enabled="false" android:state_focused="true" android:drawable="@drawable/enabled_focused_image" />
          <item android:state_enabled="false" android:drawable="@drawable/enabled_image" />
          <item android:state_focused="true" android:drawable="@drawable/focused_image" />
          <item android:state_pressed="true" android:drawable="@drawable/pressed_image" />
          <item android:drawable="@drawable/default_image" />
</selector>

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

Затем прикрепите это как фон к линейному макету:

<LinearLayout
    android:id="@+id/ltest"
    android:layout_width="300dp"
    android:layout_height="33dp" 
    android:background="@drawable/selector_file_name"
    android:orientation="vertical">

, где имя файла селектора - это просто имя, которое вы дали упомянутому мною XML-файлу селектора.выше.

Также рассмотрите возможность удаления внутренних LinearLayouts.Вы можете сделать то, что вы пытаетесь сделать с 9-patch , тогда у вас будет только один LinearLayout (который вы можете просто изменить на ImageView, если он не будет размещать другие виды).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...