我正在使用门控制单元来控制车窗。 我有4个按钮(自动向上和向下,向上和向下)。他们做得很好,但我希望单个上下按钮能像真车一样反应。如果我长按它们,只要点击按钮就会移动它们。
我尝试使用OnTouchListener实现它,它甚至可以工作,但只有当我在按钮上移动时。如果我只是单击并按住我的手指,它会做一个短暂的单动,然后在我移动手指之前没有任何东西。
是否有像isClicked()方法的东西?我试过isActivated,isPressed,isSelected,是专注,但没有一个能解决我的问题。
答案 0 :(得分:0)
您必须在onTouch方法中自行编程: 你所描述的是因为触摸事件是在触摸时用参数Event.DOWN触发,然后在你的手指移动时用参数Event.MOVE触发,最后在释放时用Event.UP触发。
所以你必须检测触摸DOWN事件,启动一个定时器,每隔x毫秒放一次窗口,然后在检测到触摸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 = FALSE”。然后,在您班级的任何地方,您都可以检查当前是否点击了该按钮
答案 1 :(得分:0)
使用选择器进行实施:
只需将一个名为“drawable”的diresctory制作成一个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"
它会起作用。