2013-04-25 76 views
0

我有一个画廊与图像。我已经在画廊上设置了一个ontouch事件,我可以从图库中拖动图像并将其放置在其他位置。我可以拖动它,但正如我在onTouch事件中所做的那样,我的画廊剂量已经无法滚动。是否有什么可以区分onTouch和划动动作? 这里是我的画廊里的onTouchEventGalleryview-Differentiate触摸和滑动

final GestureDetector gdt = new GestureDetector(new GestureListener()); 

private static final int SWIPE_MIN_DISTANCE = 150; 
private static final int SWIPE_THRESHOLD_VELOCITY = 100; 
private static final int SWIPE_MAX_OFF_PATH = 100; 

gallery.setOnTouchListener(new OnTouchListener(){ 

@Override 
    public boolean onTouch(View arg1, MotionEvent event) { 
      if(gdt.onTouchEvent(event)){ 
    Log.v(TAG,"gesture detector"); 
     return true; 
    } 

    if(event.getAction()==MotionEvent.ACTION_DOWN){ 

    Gallery parent =(Gallery) arg1; 
    int x=(int)event.getX(); 
    int y=(int) event.getY(); 
    int position=parent.pointToPosition(x, y); 

    ImageView viewDraggedFromGallery=(ImageView)parent.getChildAt(position); 
    if(viewDraggedFromGallery.getTag() != null){ 
    ClipData.Item item=new ClipData.Item((CharSequence)viewDraggedFromGallery.getTag().toString()); 

    ClipDescription NOTE_STREAM_TYPES= new ClipDescription ((CharSequence)viewDraggedFromGallery.getTag().toString(),new String[ ] {ClipDescription.MIMETYPE_TEXT_PLAIN}); 
    ClipData clipData=new ClipData(NOTE_STREAM_TYPES,item); 
    clipData.addItem(item); 
    DragShadowBuilder shadowBuilder=new View.DragShadowBuilder(viewDraggedFromGallery); 
    arg1.startDrag(clipData, shadowBuilder, viewDraggedFromGallery, 0); 
    return true; 
     } 
     else{ 
      Log.v(TAG,"gallery on touch- Invalid Tag"); 
      return false; 

      } 
     } 

      return false; 
     } 

     public boolean dispatchTouchEvent(MotionEvent ev){ 
    Log.v(TAG,"touch event dispatched"); 
    super.dispatchTouchEvent(ev); 
    Log.v(TAG,"gdt.OnTouchEvent(ev) " + gdt.onTouchEvent(ev)); 
    return gdt.onTouchEvent(ev); 

    } 
private class GestureListener extends SimpleOnGestureListener{ 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     Log.v(TAG,"motion event e1 = " + e1); 
     Log.v(TAG,"motion event e2 = " + e2); 
     float dX = e2.getX()-e1.getX(); 

     float dY = e1.getY()-e2.getY(); 
     if (Math.abs(dY)<SWIPE_MAX_OFF_PATH && 

       Math.abs(velocityX)>=SWIPE_THRESHOLD_VELOCITY && 

       Math.abs(dX)>=SWIPE_MIN_DISTANCE) { 
      return true; 
     } 

     return false; 
    } 
} 

回答

0

你应该建立自己负责处理双方onTouch()onFling()自定义手势检测(“甩”是Android中“刷卡”的代名词)。

看看这个tutorial

+0

好吧,我跟着教程..和我ontouchlistener加入这一点,如果(gdt.onTouchEvent(事件)){ \t Log.v(TAG “姿态探测器”); \t返回true; }但gdt.onTouchEvent(event))总是返回false。它不会进入OnFling()。为什么这样? – user1618970 2013-04-26 15:43:50

+0

发布您的更新代码。我不知道你是如何适应你的需求的例子。 – MarsAtomic 2013-04-26 21:32:14

+0

已经更新了我的code.i需要取消拖动,当用户刚刚浏览galleryview。 – user1618970 2013-04-26 22:37:33