【问题标题】:How to check if Button is still clicked after second如何检查按钮是否在第二秒后仍然被点击
【发布时间】:2013-11-14 14:59:52
【问题描述】:

我正在寻找一种在按住按钮一秒钟时调用函数的方法。当按钮被释放时,应该调用另一个函数。

我正在考虑一个 onLongClickedListener 但这对我来说效果不佳,因为要显示的文本会太长或太短。 我认为 TouchListener 可以帮助我,因为 Action_Up 事件可以让我选择在不再按下按钮时让文本消失。 Action_down 事件在按下按钮时给我,我想我可以在按下按钮时启动计时器,等待一秒钟,再次检查按钮是否仍然被按下,然后调用函数(显示文本)。

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub

    switch (v.getId()) {
    // the button. I set bFertig.setOnTouchListener(this); in onCreate
    case R.id.bFertig:
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            // everything works up to here
            waitTimerNotif = new CountDownTimer(1000, 500) {
                @Override
                public void onTick(long arg0) {}

                @Override
                public void onFinish() {
                    // TODO Auto-generated method stub
                    // here im checking if the button still is pressed
                    if (bFertig.isPressed()) {
                        // It never goes into here
                        ShowNotifBox("Fertig", "fertig", false, false,false);
                    }
                }
            }.start();
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            DissapearNotifBox();
            Log.d("Debug", "Button released");
        }
        break;
    }
    return true;
}

对于xml中的按钮:

<Button
    android:id="@+id/bFertig"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:background="@drawable/fertigbutton"
    android:gravity="center"
    android:textColor="#ffffff"
    android:textSize="18.5dp" 
    android:clickable="true"/> <!--Googleing suggested I need this for isPressed() to work but it didnt help

任何想法我做错了什么或为什么这不起作用?谢谢!

【问题讨论】:

  • 这段代码没读完,但是你不能设置一个开始触摸的时间,然后和你释放的时间比较一下吗?
  • longClickListener 确实是你应该做的,因为它将使用用户系统中所有其他应用程序使用的标准延迟
  • @Cruncher 不太明白你的意思。我不希望在释放按钮后调用该函数,而是在第一次按下按钮直到释放按钮后一秒钟调用
  • 您是否尝试过 isSelected() 代替?
  • 你也可以再次检查event.getAction() == MotionEvent.ACTION_DOWN而不是isPressed()

标签: java android


【解决方案1】:

您正在返回 true,它告诉系统您正在处理触摸事件,这意味着按钮不是,这意味着它可能没有更新其按下状态。尝试返回 false。

【讨论】:

  • 哇!这确实是问题所在。谢谢@Ootinii!关于如何检查手指是否仍在按钮上或已移开的任何想法?应该与MotionEvent.ACTION_MOVEif 一起使用,例如goo.gl/XWxsHz,但我不知道用什么替换矩形。
  • 您是否在按钮本身上实现了 onTouch?
  • 假设您正在按钮视图上实现触摸监听器,您应该能够检查 event.getX() >= v.getLeft() && event.getX() = v.getTop() && event.getY()
  • 接受答案,请:)
【解决方案2】:

为什么不使用setOnLongClickListener 函数? 这应该可以解决您的问题。 一个例子可以在这里找到:setOnLongClickListener

【讨论】:

  • 我知道如何使用 OnLongClickListener 但它的问题是,我希望在释放按钮时调用另一个函数。我尝试让 LongClickListener 启动我的第一个函数和一个 onTouchListener,它在按钮被释放时获取,然后启动第二个函数以隐藏第一个函数中的文本。
猜你喜欢
  • 2020-05-23
  • 2011-05-11
  • 1970-01-01
  • 2021-03-08
  • 2015-08-22
  • 2013-05-09
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多