[英]Double Tap and Drag listeners on the same view?
我试图拦截同一视图上的拖动事件以及双击事件,从而可以将视图拖动到放置位置,或者如果用户双击同一视图,则可以打开一个对话框。 问题是在设置View.DragShadowBuilder(view)后,使用SimpleOnGestureListener拦截MotionEvent.ACTION_DOWN事件时,永远不会调用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 ;
}
}
我之前遇到过同样的问题,我所做的是我在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);
}
希望这会帮助你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.