Можно рисовать с помощью селектора?

#android #image #selector #drawable #touch-event

#Android #изображение #селектор #можно рисовать #сенсорное событие

Вопрос:

в папке для рисования:

  <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
           android:drawable="@drawable/icon2" /> 
     <item android:drawable="@drawable/icon3" /> 
 </selector>
  

и макет — это просто линейный макет, который заполняет все пространство

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="@drawable/on_touch_"
    android:weightSum="1" android:focusable="true" android:focusableInTouchMode="true">
</LinearLayout>
  

и когда я нажимаю это, ничего не происходит

Если я добавлю, например, какой-нибудь textview и назначу android:background="@drawable/on_touch_" , то при нажатии этого textview изображение изменится правильно.

В чем проблема с линейной компоновкой, почему она не меняет изображение при нажатии?

Редактировать: я уверен, что мой рисованный селектор хорош и работает, потому что я поставил в качестве фона для других элементов, и он работает.

Но моя проблема в том, как установить drawable для корневого элемента

Комментарии:

1. Что именно вы хотите реализовать?

Ответ №1:

Добавьте это в свой макет :

  android:clickable="true"
  

Это установит нажатое состояние, когда вы нажмете на него.

Ответ №2:

попробуйте

save_selector.xml

 <?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">



    <item android:state_focused="true" android:state_pressed="false"
        android:drawable="@drawable/save_hover_new" />
    <item android:state_focused="true" android:state_pressed="true"
        android:drawable="@drawable/save_hover_new" />
    <item android:state_focused="false" android:state_pressed="true"
        android:drawable="@drawable/save_hover_new" />

    <item android:drawable="@drawable/save_new" />

</selector>
  

и укажите фон макета как селектор, подобный
android: background=»@drawable /save_selector

Комментарии:

1. tnx, но проблема не в селекторе. Я помещаю тот же селектор, который можно рисовать, в другой компонент, такой как textview, и он работает, но не с макетом

2. ДА, определенно это можно сделать! Я сделал это, но не в корневом макете, моя проблема в том, что я не могу добавить его в корневой макет

Ответ №3:

Я бы убедился, что у меня нет тезки, который можно нарисовать. Вы, кажется, используете on_touch_.xml в качестве своего селектора. Возможно, есть также on_touch_.png ?

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

Ответ №4:

Я получил селектор в корневом элементе, который работает нормально; фон переключается при нажатии. Это не корневой элемент макета действия, но это корневой элемент XML-файла.

Сначала фону присваивается формат png:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/panel"
>
    ...
  

Я назначаю фон селектору только при назначении OnClickListener:

 private void setClickListener(OnClickListener ocl) {

    View boxRoot = findViewById(R.id.box_root);
    if (ocl != null) {
        boxRoot.setOnClickListener(ocl);
        boxRoot.setBackgroundDrawable(getResources().getDrawable(R.drawable.panel_arrow_right_bgstate));

        setClickable(true); 
                    ...
  

В моем XML я использовал android:clickable="true" , но затем я также добавил android:focusable="true" android:focusableInTouchMode="true" в соответствии с вашим случаем. Это также отлично работало с переключением фона для всех моих четырех состояний.

 // panel_arrow_right_bgstate.xml
<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/panel_arrow_right_normal"/>
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/panel_arrow_right_pressed"/>
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/panel_arrow_right_selected"/>
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/panel_arrow_right_pressed"/>
  

Если у вас это не работает, значит, с вашим кодом что-то не так, где-то еще.

Когда я добавляю или удаляю чертежи, Eclipse иногда становится подозрительным и смешивает их. Мои обычные измерения:

  1. Чистый проект
  2. Обновить папку res в Eclipse
  3. Удалить gencom.comp.projR.java