【问题标题】:Android Drag and Drop - image not getting draggedAndroid拖放 - 图像没有被拖动
【发布时间】:2016-08-15 14:50:36
【问题描述】:

在我的 Android 程序中,我想在线性布局中将图像视图从一个位置移动到另一个位置。图像视图被拖动,但是当我放置在某个位置时,它本身又返回到起始位置。我能做些什么?谷歌了很多,但没有得到解决方案。

我的 OnTouch:

img.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                ClipData data = ClipData.newPlainText("", "");
                View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(img);

                img.startDrag(data, shadowBuilder, img, 0);
                img.setVisibility(View.INVISIBLE);
                return true;
            } else {
                return false;
            }
        }
    });

我的 OnDrag:

linearLayout.setOnDragListener(new View.OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {
            switch (event.getAction()) {
                case DragEvent.ACTION_DROP:
                    View view = (View) event.getLocalState();
                    ViewGroup owner = (ViewGroup) view.getParent();
                    owner.removeView(view);
                    LinearLayout container = (LinearLayout) v;
                    container.addView(view);
                    view.setVisibility(View.VISIBLE);
                    Log.d(msg, "ACTION_DROP event");
                    break;
                default:
                    break;
            }
            return true;
        }
    });

【问题讨论】:

    标签: android drag-and-drop android-studio-2.0


    【解决方案1】:

    我猜它已经在android drag and drop ImageView onTouchListener 回复了。

    我也把他的内容贴在这里了

    如果您需要支持姜饼,可以在这里查看我的示例

    https://github.com/NAYOSO/android-dragview

    如果你只需要支持上面的果冻豆,你可以使用android库中的拖放,你可以从这篇文章中看到它

    http://developer.android.com/guide/topics/ui/drag-drop.html

    对于拖放视图的一些解释,首先你不需要创建触摸监听器,然后调用 startDrag 开始拖动。就这么简单。

    私有最终类 dragTouchListener 实现 OnTouchListener {

        @Override 
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                v.startDrag(data, shadowBuilder, v, 0);
                return true; 
            } else { 
                return false; 
            } 
        } 
    
    } 
    

    你可以使用 onDragListener 来监控放置的目标

    私有类 dropListener 实现 OnDragListener {

    View draggedView;
    CustomTextView dropped;
    
    @Override 
    public boolean onDrag(View v, DragEvent event) {
        switch (event.getAction()) {
        case DragEvent.ACTION_DRAG_STARTED:
            draggedView = (View) event.getLocalState();
            dropped = (CustomTextView) draggedView;
            draggedView.setVisibility(View.INVISIBLE);
            break; 
        case DragEvent.ACTION_DRAG_ENTERED:
            break; 
        case DragEvent.ACTION_DRAG_EXITED:
            break; 
        case DragEvent.ACTION_DROP:
    
            CustomTextView dropTarget = (CustomTextView) v;
            dropTarget.setText(dropped.getText().toString());
            break; 
        case DragEvent.ACTION_DRAG_ENDED:
            break; 
        default: 
            break; 
        } 
        return true; 
    } 
    

    } 正如您从我的代码中看到的那样,有很多事件,但主要的是当视图开始被拖放和结束时。

    别忘了设置监听器来查看

    tvDrag.setOnTouchListener(new dragTouchListener());
    tvDrop.setOnDragListener(new dropListener())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多