目前我正在寻找如何在onTouch功能上实现停留时间的想法。通常,onTouch 事件仅处理"向上"、"向下"和"运动"事件。
我希望用户能够在任何地方触摸,之后他可以滑动到屏幕上的物体,如果他在一段时间内保持静止(=几乎没有移动(,就会触发动作。
有没有办法获取触摸时不移动的事件或可用于此行为的任何其他类型的事件?我目前的解决方案是...丑
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;
提前谢谢。
我认为您只需要为这个答案添加一些空间条件。像(非常松散(:
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);
}