【发布时间】: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()