我试图拦截拖动事件以及同一视图上的双击事件,我可以将视图拖动到放置位置,或者如果用户双击同一视图,则打开一个对话框。问题是当使用SimpleOnGestureListener拦截MotionEvent.ACTION_DOWN事件时,在设置View.DragShadowBuilder(view)之后,永远不会调用onDoubleTap。关于如何允许拖动视图以及双击的任何想法?我想有可能在SimpleOnGestureListener的MotionEvent.ACTION_CANCEL或onSingleTapUp方法上以某种方式取消view.startDrag但是到目前为止我还没有想出一种取消拖动的方法,如果这样就可以了。感谢。
在适配器getView中:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
// AlbumHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
}
final GestureDetector gdt = new GestureDetector(getActivity(),new GestureListener(textview,storyItem));
textview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
action = event.getActionMasked();
return gdt.onTouchEvent(event);
}
});
活动中的外部适配器:
private class GestureListener extends SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
return true;
}
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e){
Toast.makeText(getActivity(), "double tapped", Toast.LENGTH_SHORT).show();
showDialog();
return true ;
}
}
答案 0 :(得分:0)
我之前遇到了同样的问题,我做了什么是我在GestureDetector的onLongPress事件中移动了拖放操作。
所以你可以使用onLongPress而不是
@Override
public void onLongPress(MotionEvent motionEvent) {
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
}
希望这会对你有所帮助。