2016-08-24 120 views
0

我想要检测某个人是否以类似于Chrome的方式拖动/从工具栏中拖曳下来,而不是关闭该活动。但是我发现根本没有检测到手势(由于onFling()从未被调用,所以我发现这一点),但是仍然检测到单/双敲击。在工具栏上检测到手势检测

下面是从代码片段,我用来测试它是否工作:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    /*...*/ 
    Toolbar toolbar = (Toolbar) findViewById(R.id.wizard_toolbar); 

    final GestureDetector toolbarGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { 
     static final int MIN_SWIPE_VELOCITY = 200; 
     static final int MIN_SWIPE_DISTANCE = 200; 

     @Override 
     public boolean onDown(MotionEvent e) { return true; } 

     @Override 
     public boolean onSingleTapUp(MotionEvent e) { 
      Toast.makeText(EventCreationWizard.this, "You touched me!!!", Toast.LENGTH_LONG).show(); 
      return true; 
     } 

     @Override 
     public boolean onDoubleTap(MotionEvent e) { 
      Toast.makeText(EventCreationWizard.this, "You touched me!!! Twice!!!", Toast.LENGTH_LONG).show(); 
      return super.onDoubleTap(e); 
     } 

     @Override 
     public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { 
      if((event2.getY() - event2.getY() >= MIN_SWIPE_DISTANCE) && (Math.abs(velocityY) >= MIN_SWIPE_VELOCITY)) { 
       Toast.makeText(EventCreationWizard.this, "You swiped me!!!", Toast.LENGTH_LONG).show(); 
       return true; 
      } 

      return false; 
     } 
    }); 
    toolbar.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      return toolbarGestureDetector.onTouchEvent(motionEvent); 
     } 
    }); 
    setSupportActionBar(toolbar); 
    /*...*/ 
} 
+0

在你的** onFling **'return super.onFling(e1,e2,velocityX,velocityY);' – Amir

+0

@Amir是代替'return false' – TheKingOfAtlantis

+0

看到我的回答,这个答案解决了我的问题希望解决你的问题。 – Amir

回答

0

在onFling的flase回报您代替:

super.onFling(e1, e2, velocityX, velocityY);

,并返回truesetOnTouchListener

toolbar.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     toolbarGestureDetector.onTouchEvent(motionEvent); 
     return true; 
    } 
}); 
+0

我发现问题的原因超出了返回的内容,相反onFling永远不会被调用,谢谢反正 – TheKingOfAtlantis