在我的Android应用程序中.我有一个全景视图,在这个视图中我想避免只垂直滚动.所以我使用onTouchEvent(MotionEvent event)方法禁用它 .
听到的是代码.
@Override
public boolean onTouchEvent(MotionEvent event) {
if( event.getAction()==MotionEvent.ACTION_UP){
Log.d(TAG, "onTouchEvent:ACTION_UP");
return false;
}else if(event.getAction()==MotionEvent.ACTION_DOWN){
Log.d(TAG, "onTouchEvent:ACTION_DOWN");
return false;
}else{
Log.d(TAG, "onTouchEvent:ACTION_UNKWON");
return super.onTouchEvent(event);
}
}
Run Code Online (Sandbox Code Playgroud)
但它也禁止水平滚动.我怎么能解决这个问题?
我想你误解了ACTION_DOWN和的概念ACTION_UP.
ACTION_DOWN意味着当您的手指触摸触摸屏时,ACTION_UP是指您从触摸屏上抬起手指.
也就是说,您可以指示ACTION_DOWN运动事件已开始,ACTION_MOVE从坐标检查触摸事件的方向,并决定是否要阻止运动,并重置变量ACTION_UP.
float startX
float startY;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
float currentX = event.getX();
float currentY = event.getY();
float diffX = Math.abs(currentX - startX);
float diffY = Math.abs(currentY - startY);
// The purpose of the +100 is to make sure that we have a big enough
// difference between the 2 directions, eg. it's not diagonal
if(diffY > diffX + 100){
return false;
}
break;
case MotionEvent.ACTION_POINTER_UP:
break;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3498 次 |
| 最近记录: |