0

在 Android 中,每当我单击一个按钮(即 ImageButton)时,我想通过更改按钮的颜色(可能是反转颜色或变暗等)来给用户反馈。此时,我不想更改为新按钮或任何东西,只想更改状态以反映点击。

我意识到我可以添加一个新的可绘制对象,因此每个按钮都有两种状态(单击时,我会更改为第二种状态)。

即(伪代码):

点击{

   ImageButton.setDrawable(R.drawable.myclickedbutton)

}

有没有更好的方法来做到这一点(我相信当你点击时iOS会为你使用ImageColors,这就是我在Android中想要的),还是我认为唯一的可能性?

我觉得我在这个概念上遗漏了一些重要的东西。

提前致谢。

编辑:如果有什么不同,我的应用程序在最低目标 2.2 上运行。

编辑 2:为澄清起见,我正在使用已经具有自定义可绘制资源的图像按钮。这就是我想要操纵 onClick 的内容。

编辑3:我认为我在这里不够清楚。我知道如何使用两个可绘制对象(无论是 onTouch、XML、onClick 等)更改状态。点击(我相信,就像 iOS 一样)。我不是在问如何在按钮到按钮的基础上做到这一点。这可以通过每个按钮 2 个可绘制对象来完成,我意识到这一点。

4

3 回答 3

2

按钮.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <corners android:radius="5dp"/>
            <solid android:color="#f00"/>
            <padding android:left="10.0dip" android:top="10.0dip"
                android:right="10.0dip" android:bottom="10.0dip"/>
            <stroke android:width="1.0dip" android:color="#222"/>
        </shape>
    </item>
    <item android:state_pressed="false">
        <shape android:shape="rectangle">
            <corners android:radius="5dp"/>
            <solid android:color="#f1f1f1"/>
            <padding android:left="10.0dip" android:top="10.0dip"
                android:right="10.0dip" android:bottom="10.0dip"/>
            <stroke android:width="1.0dip" android:color="#222"/>
        </shape>
    </item>
</selector>

将此按钮应用为背景

<Button
    android:background="@drawable/button"/>

在你的类文件中这样做

public void onClick(View v) {

  pressedButton.setPressed(true);
}

这样红色才会稳定

于 2012-11-01T04:47:04.800 回答
0

您可以将 onTouchListener 用于按钮并根据按钮单击更改按钮的状态。

                button.setOnTouchListener(new OnTouchListener() {

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                     if(event.getAction()==MotionEvent.ACTION_DOWN)
                     {
                   // here u can change the button color or image as clickable as 
                   button.setBackgroundImage(R.drawable.image_pressed);

                     }
                     if(event.getAction()==MotionEvent.ACTION_UP)
                     {
                  // here u can change the button color or image as released as 
                   button.setBackgroundImage(R.drawable.image_released); 
                     }
                        return false;
                    }
                });

我想它可能对你有帮助..

于 2012-11-01T05:17:22.163 回答
0

您不必使用您提到的代码来切换可绘制对象。而是创建具有两种不同状态的可绘制对象。

正如您所说,您已经有自定义可绘制对象,您可以将它们用于不同的状态。

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

  <item android:state_pressed="true"
   android:drawable="@drawable/drawable1" /> <!-- for clicked state-->        
 <item android:drawable="@drawable/drawable2" /> <!-- for normal state--> 
</selector>

将此 xml 作为 drawable_1.xml 放置在可绘制文件夹中,并在您的代码中使用此可绘制对象,

yourButton.setDrawable(R.drawable.drawable_1)
于 2012-11-01T05:02:56.607 回答