可以用选择器绘制?

时间:2011-10-12 08:31:56

标签: android image selector drawable ontouchevent

在drawable文件夹中:

 <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_",则按下该文本视图时会更正图像。

线性布局的问题在于,为何在按下时不会改变图像?

编辑: 我确信我的drawable选择器很好并且工作正常,因为我把它作为其他元素的背景并且它正在工作。

但我的问题是如何将drawable设置为 root 元素

4 个答案:

答案 0 :(得分:6)

将此添加到您的布局:

 android:clickable="true"

这将在您单击时设置按下状态。

答案 1 :(得分:0)

试试

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>

并将布局的背景作为选择器 机器人:背景=“@绘制/ save_selector

答案 2 :(得分:0)

我会确保我没有可画的同名词。您好像使用on_touch_.xml作为选择器。是否还有on_touch_.png

我还要确保我没有在代码中再次设置背景,其他内容或使其无法点击。

答案 3 :(得分:0)

我在根元素中有一个选择器,工作正常;按下时背景会切换。它不是活动布局的根元素,但它是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"/>

如果这对您不起作用,那么您的代码在其他地方还有其他问题。

当我添加或删除drawable时,Eclipse有时会变得浑浊并将它们混合起来。我的正常测量值是:

  1. 清理项目
  2. 在Eclipse中刷新res文件夹
  3. 删除gen \ com.comp.proj \ R.java