0

我正在制作一个应用程序,我想使用自定义按钮皮肤。按下按钮时我用于更改背景的代码如下:

 button3.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN) {
                button3.setBackgroundResource(R.drawable.blue_buttonn);
            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                button3.setBackgroundResource(R.drawable.black_buttonn);
            }else if (event.getAction() == MotionEvent.ACTION_HOVER_MOVE) {
                button3.setBackgroundResource(R.drawable.black_buttonn);
            }
            return false;
        }
    });

此代码应该在按下按钮时使按钮变为蓝色,并在释放时将其返回为黑色。它可以工作,但是如果您单击按钮并将其拖离它,则不会触发事件 ACTION_UP 。在这种情况下我应该使用什么事件?

我编辑了我的代码,添加了事件 HOVER_MOVE,当您将手指移出按钮时该事件起作用。但是因为这些按钮位于自定义列表视图的项目内,如果您将手指移到当前项目之外,则不会触发事件 HOVER_MOVE。

在此处输入图像描述

4

3 回答 3

3

尝试这个

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

<item     android:state_enabled="false"     
android:drawable="@drawable/default_bgnd" />

<item     android:state_focused="true"        
android:drawable="@drawable/new_green" />

<item     android:state_pressed="true"        
android:drawable="@drawable/new_green" />

<item     android:state_checked="true"        
android:drawable="@drawable/new_green"/>

<item     android:state_selected="true"        
android:drawable="@drawable/new_green" /> 
</selector> 

将此xml放在drawables文件夹中并将其设置为xml中按钮的背景祝你好运

于 2013-09-02T16:03:50.693 回答
0

Try returning true instead of false. True indicates that listener consumed the TouchEvent.

于 2013-09-02T15:37:45.203 回答
0

尝试这个。

onButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(ParentalSet.equalsIgnoreCase("OFF")){
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
((TextView) v).setTextColor(0xFF000000);
onButton.setBackgroundDrawable(getResources().getDrawable(buttonGlow));
break;
case MotionEvent.ACTION_UP:
onButton.setTextColor(Color.parseColor                                                                 (OptimumConstants.CODE_000000));
onButton.setBackgroundDrawable(getResources().getDrawable                                           (R.drawable.new_off));
break;
default:
break;
 }
}
return false;
}
});
于 2013-09-05T07:59:22.770 回答