【问题标题】:Android - Dragging with a LongClickListener instead of OnTouch?Android - 使用 LongClickListener 而不是 OnTouch 拖动?
【发布时间】:2014-08-12 09:32:01
【问题描述】:

如何让 ImageButton 使用 LongClickListener 而不是 OnTouchListener 进行拖动?我需要该按钮来执行操作 OnClick,当我单击它时,它认为我正在开始拖动。

我尝试了一些 StackoverFlow 答案,但没有任何效果。

所以,这是我开始拖动的代码:

homeView.setOnDragListener(new IconDragListener());
ll.setOnTouchListener(new MyTouchListener());
...
class IconDragListener implements View.OnDragListener{

    @Override
    public boolean onDrag(View v, DragEvent event) {
        GridLayout gridLayout = (GridLayout) v.findViewById(R.id.middleGrid);
        final int action = event.getAction();
        switch (action) {
            case DragEvent.ACTION_DRAG_STARTED:
                // do nothing
                break;
            case DragEvent.ACTION_DRAG_ENTERED:
                //On drag entered

            case DragEvent.ACTION_DROP:
                if (event.getAction()==DragEvent.ACTION_DROP) {
                    View view = (View) event.getLocalState();
                    ViewGroup from = (ViewGroup) view.getParent();
                    from.removeView(view);
                    GridLayout to = (GridLayout) v;
                    to.addView(view);
                    view.setVisibility(View.VISIBLE);
                    //deleteAreaForAdapter.setVisibility(View.INVISIBLE);
                    deleteAreaForAdapter.setAnimation(slide_out);
                }
                return true;
            case DragEvent.ACTION_DRAG_ENDED:
                //do nothing
            default:
                break;
        }
        return true;
    }

...

// Touch Listener, I'd like this to be OnLongClick
private final class MyTouchListener implements View.OnTouchListener {
    @Override
    public boolean onTouch(View v, MotionEvent e) {
        if (e.getAction() == MotionEvent.ACTION_DOWN) {
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
            v.startDrag(null, shadowBuilder, v, 0);
            deleteAreaForAdapter.setVisibility(View.VISIBLE);
            deleteAreaForAdapter.startAnimation(slide_in);
            v.setVisibility(View.INVISIBLE);
            return true;
        } else {
            return false;
        }
    }
}

谢谢!

【问题讨论】:

    标签: java android drag-and-drop onlongclicklistener


    【解决方案1】:

    把你的代码放在setOnLongClickListenerImageButton

    ImageButton.setOnLongClickListener(new OnLongClickListener() {
    
                @Override
                public boolean onLongClick(View v) {
                    View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                    v.startDrag(null, shadowBuilder, v, 0);
                    deleteAreaForAdapter.setVisibility(View.VISIBLE);
                    deleteAreaForAdapter.startAnimation(slide_in);
                    v.setVisibility(View.INVISIBLE);
                    return true;
                }
            });
    

    【讨论】:

      【解决方案2】:

      试试这个

      public class ChoiceLongClickListener implements View.OnLongClickListener {
      
      Context context;
      View dragView;
      
      public ChoiceLongClickListener(Context context, View dragView) {
          this.context = context;
          this.dragView = dragView;
      }
      
      @Override
      public boolean onLongClick(View view) {
      
          ClipData.Item item = new ClipData.Item((CharSequence) view.getTag());
          String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};
      
          ClipData dragData = ClipData.newPlainText("", "");
          View.DragShadowBuilder myShadow = new View.DragShadowBuilder(dragView);
      
          view.startDrag(dragData, myShadow, null, 0);
      
          return true;
      }}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-05
        • 1970-01-01
        相关资源
        最近更新 更多