注意:解决了此特定问题,但存在严重的后续问题。看看GestureDetector - Detect double click in GridView item's although returning false in onTouchEvent()手势检测器检测DoubleClick on GridView项目
我想检测图像GridView
中不同项目的双击。 因此,我在适配器的getView()
方法中为每个项目imageView
分配了一个单独的OnTouchListener
。 gestureDetector
是适配器类的成员变量。
private GestureDetectorCompat gestureDetector;
public ImageGridViewAdapter(Context c, ArrayList<UriWrapper> startUpImages) {
mContext = c;
uriManager = new UriManager(startUpImages);
gestureDetector = new GestureDetectorCompat(mContext, new SingleTapConfirm());
}
public View getView(final int position, View recycled, ViewGroup parent) {
ViewHolder holder;
if (recycled == null) {
..... find items by id
} else{
holder = (ViewHolder) recycled.getTag();
}
// Set listener to item image
holder.image.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// Always returns false, the gestureDetector does not detect anything
boolean ret = gestureDetector.onTouchEvent(event);
// At least the onTouch-callback gets called with the correct position
Log.e(TAG, "onTouch returned " + ret + " at position " + position);
return true;
}
});
// Use glide library to load images into the image views
Glide.with(mContext)....into(holder.image);
return recycled;
}
私有类SingleTapConfirm扩展GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapConfirmed(MotionEvent event) {
Log.e(TAG, "onSingleTapConfirmed"); // never called..
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
Log.e(TAG, "onDoubleTap"); // never called..
return super.onDoubleTap(e);
}
}
的OnTouchListener
的工作和被调用与正确的位置。 但是,无论我在做什么,GestureDetector
的方法都不会被调用。这个代码似乎是什么问题?
更新:onTouch回调需要返回true,现在至少是GestureDetector的作品。但是,返回true会打破其余的功能,因为我的GridView具有长按单选模式和全局OnTouchListener。
第二次更新: 合并特定于项目的OnTouchListener和全局OnTouchListener无法正常工作。 (只在某些项目上识别滑动手势) 我希望能够通过创建自定义视图扩展ImageView并在其中分配特定于项目的OnTouchListener来解决这两个问题。
检查此链接:http://stackoverflow.com/questions/2217670/android-how-to-detect-double-tap – prakash