繁体   English   中英

Android-自定义按钮卡在“按下”位置

[英]Android - Custom Button gets stuck “Pressed”

我在Android应用程序中创建了一个自定义按钮,该按钮基本上具有两个不同的视图。 有一个图像用于未按下按钮,另一图像用于按下按钮。 以下是我实现按钮的方式以及它对用户的响应。

private void registerListeners() {

    calcButton.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            calcButton.requestFocusFromTouch();
            calcButton.setImageResource(R.drawable.calc_button_pressed);
            return false;
        }
    });

    calcButton.setOnFocusChangeListener(new View.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            calcButton.setImageResource(R.drawable.calc_button_not_pressed);
        }
    });

    calcButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {           
            mathCalculation();
            calcButton.setImageResource(R.drawable.calc_button_not_pressed);
        }
    });
}

我的问题是存在一个“错误”,如果用户触摸该按钮并将其图形拖离该按钮,该按钮将保持按下状态。 我上面实现的一种解决方法是“ setOnFocusChangeListener”,因此一旦用户选择了其他内容,它就会弹出。

我想要它,以便当用户将按钮拖到那里时,按钮弹出来。

所有建议,不胜感激!!!

谢谢,

您无需编写单独的按钮类即可获得该行为,您可以通过可绘制的xml实现它。 在您的xml中保存此文件,并将其设置为按钮的背景:

<?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/calc_button_pressed" />
    <item android:drawable="@drawable/calc_button_not_pressed" />
</selector>

在您的onTouch方法中,检查事件操作。

  • 如果是MotionEvent.ACTION_DOWN,请照常进行。
  • 如果是ACTION_UP或ACTION_CANCEL,则调用calcButton.setImageResource(R.drawable.calc_button_not_pressed);

http://developer.android.com/reference/android/view/MotionEvent.html

您可以使用use onTouch 然后使用当用户触摸时将触发的ACTION_OUTSIDE移出视图边界。

编辑1:更具体:

OnTouchListener(MotionEvent e) {
   switch(e.getAction()) {
      case MotionEvent.ACTION_OUTSIDE: // switch the image if the button
    }
}

这是因为单击事件仅在触摸和释放时才“发生”。 如果您要触摸并移到外面,那不是单击。

要使用StateListDrawable完成您想要的操作 ,它就是为此而创建的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM