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;
}
}
好吧,我跟着教程..和我ontouchlistener加入这一点,如果(gdt.onTouchEvent(事件)){ \t Log.v(TAG “姿态探测器”); \t返回true; }但gdt.onTouchEvent(event))总是返回false。它不会进入OnFling()。为什么这样? – user1618970 2013-04-26 15:43:50
发布您的更新代码。我不知道你是如何适应你的需求的例子。 – MarsAtomic 2013-04-26 21:32:14
已经更新了我的code.i需要取消拖动,当用户刚刚浏览galleryview。 – user1618970 2013-04-26 22:37:33