目前我正在寻找如何实现onTouch功能的停留时间的想法。通常,onTouch事件仅处理事件Up,Down和Motion。
我希望用户能够在任何地方触及,之后他可以滑动到屏幕上的一个物体,如果他保持静止(=很少甚至没有动作)一段时间就会触发一个动作。
是否有办法让触摸时不移动的事件或我可以用于此行为的任何其他类型的事件?我目前的解决方案是......丑陋
touch = new Vector2D(event.getX(),event.getY());
//if (not moving && touching && (System.nanoTime-currentNanoSeconds) > Value)
if(event.getAction()==MotionEvent.ACTION_MOVE){
currentNanoSeconds=System.nanoTime();
System.out.println(currentNanoSeconds);
}
if(event.getAction()== MotionEvent.ACTION_UP){
currentAngle=(float) angleBetween2Lines(midPoint, lineEnd, touch);
System.out.println((System.nanoTime()-currentNanoSeconds)/1000000);
touching=false;
checkTargets();
//forces redraw!
invalidate();
}
if(event.getAction()==MotionEvent.ACTION_DOWN)
touching=true;
return true;
提前感谢。
答案 0 :(得分:1)
我认为你只需要为this answer添加一些空间条件。像(非常松散)的东西:
maxMovement = ?;
final Handler handler = new Handler();
Runnable mLongPressedinSameArea = new Runnable() {
public void run() {
if (*pseudo code*: the deltas between up/down X and Y are not greater than maxMovement){
Log.i("", "Long press in same area!");
}
}
};
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView){
if(event.getAction() == MotionEvent.ACTION_DOWN)
downX = event.getX();
downY = event.getY();
handler.postDelayed(mLongPressedinSameArea, 1000);//1 second linger time.
if(event.getAction() == MotionEvent.ACTION_UP))
upX = event.getX();
upY = event.getY();
handler.removeCallbacks(mLongPressedinSameArea);
return super.onTouchEvent(event, mapView);
}