【问题标题】:Is there something like button.isClicked()?有没有类似 button.is Clicked() 的东西?
【发布时间】:2014-01-07 10:46:44
【问题描述】:

我正在使用车门控制单元来控制车窗。 我有 4 个按钮(自动上下,上下)。他们做得很好,但我希望单个向上和向下按钮能够像在真正的汽车中一样做出反应。如果我长按它们,只要单击按钮,它们就会移动。

我尝试使用 OnTouchListener 来实现它,它甚至可以工作,但前提是我在按钮上四处移动。如果我只是单击并按住我的手指,它会做一个短暂的单次移动,然后什么都不会,直到我移动我的手指。

有类似 isClicked() 方法的东西吗?我试过isActivated、isPressed、isSelected、is Focused,但都没有解决我的问题。

【问题讨论】:

标签: android button ontouchlistener


【解决方案1】:

您必须自己在 onTouch 方法中对其进行编程: 您所描述的发生是因为触摸事件在触摸时使用参数 Event.DOWN 触发,然后在手指移动时使用参数 Event.MOVE 触发,最后在释放时使用 Event.UP 触发。

所以你必须检测到 touch DOWN 事件,启动一个计时器,每隔 x 毫秒启动一次窗口,然后在检测到 touch UP 事件时停止

这是一个例子:

@Override
public boolean onTouch(View v, MotionEvent event) {

    if(event.getAction()==MotionEvent.ACTION_DOWN)
    {
        startTimer(); // The timer should repeatly call itself

    }
    else if(event.getAction()==MotionEvent.ACTION_UP)
    {
        stopTimer(); // The timer should stop

    }
}

编辑: 如果您只需要等效于 isClicked() 方法,则可以将布尔值存储为类变量:在上面的代码中,将“startTimer()”替换为“mClicked = true”,将“stopTimer()”替换为“ mClicked=假”。然后在课堂上的任何地方,您都可以检查当前是否单击了该按钮

【讨论】:

    【解决方案2】:

    为您的实现使用选择器:

    只需在其中创建一个名为“drawable”的目录,然后创建一个这样的 xml 文件:

    <?xml version="1.0" encoding="utf-8"?>
    

    <item android:state_focused="true"><color android:color="@color/red" />
    </item>
    <item android:state_pressed="true"><color android:color="@color/red" />
    </item>
    <item android:state_focused="false"><color android:color="@color/white" />
    </item>
    <item android:state_pressed="false"><color android:color="@color/white" />
    </item>
    

    现在在你的布局文件中:给出这个drawable的按钮背景:

      android:background="@drawable/your_file"
    

    它会起作用的。

    【讨论】:

      猜你喜欢
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多