【问题标题】:Keep pressed a button in onClick()按住 onClick() 中的按钮
【发布时间】:2017-01-04 05:42:01
【问题描述】:

我想保持一个按钮被按下。我想在 onTouch() 中使用另一种方式来代替 onPressed()。我添加了 setPressed(), setSelected() 但没有用。当我在 onTouch() 中添加这些方法时,程序很好,但我的动画很慢。

我可以在 onClick() 方法中使用这些方法,但可以在这个方法中使用吗? 请帮我解释一下

【问题讨论】:

  • 如果你使用onTouch()-event,你的动画很慢是什么意思?按钮是动画的,还是具有默认背景的默认 android 按钮?
  • 我的按钮顶部有一个框架布局,为了改变片段,我使用动画,当我使用 onTouch 进​​行按下状态时,我的动画很慢。
  • 好的,但是如果你设置OnTouchListener 而不是OnClickListener 它应该不会影响任何动画。它不适用于OnClickListener,因为在默认点击事件之后,按下状态将变为未按下。我将发布OnTouchListener的答案
  • 但是我使用 onTouch 并且动画很慢 :( 并且杂乱无章!我不知道为什么,但这会影响我的动画

标签: android button pressed


【解决方案1】:

您可以在onTouch-event 中设置按下状态,而不是使用将按钮返回到非按下状态的onClick-event:

yourbutton.setOnTouchListener(new OnTouchListener()
{
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        if(event.getAction() == MotionEvent.ACTION_DOWN)
        {
            ((Button) v).setPressed(true);
            //TODO: Add the code of your onClick-event here
        }
        return true;//Return true, so there will be no onClick-event
    }
});

如果这影响了任何动画,你应该在那里寻找问题。

【讨论】:

  • 你的意思是我用 onClick 按钮加载动画并用 onTouch() 按下按钮?
  • @SensorS 如果您将onTouch()return true; 一起使用,则必须将代码从onClick() 移动到onTouch()
  • 我不明白你在说什么。请进一步解释。谢谢
  • @SensorS 你只需要onTouch()。没有了onClick()
【解决方案2】:

这段代码使按钮作为切换按钮工作。它将按下的属性设置为相反的。

如果按钮被按下,它被设置为未按下。 如果按钮未按下,则设置为按下。

  @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        Button b = ((Button) v);
                        b.setPressed(!b.isPressed());//if pressed, unpress; if unpressed, press
                    }
                    return true;
                }

【讨论】:

    【解决方案3】:

    您所描述的似乎是一个切换按钮。也许你应该检查一下,而不是做一个骇人听闻的解决方案:

    Toggle Buttons

    【讨论】:

      【解决方案4】:

      扩展切换按钮或:

      Button button = (Button) view.findViewById(R.id.button1);
      button.setTag(false);
      button.setOnTouchListener(new OnTouchListener() {
          public boolean onTouch(View v, MotionEvent event) {
              if (event.getAction() == MotionEvent.ACTION_UP)
                  if ((boolean) v.getTag()) {
                      v.setPressed(false);
                      v.setTag(false);
                      return false;
                  } else {
                      v.setPressed(true);
                      v.setTag(true);
                      return true;
                  }
              return false;
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多