0

In my Android program, I want to move my imageview from one position to another in a Linear Layout. The imageview is getting dragged, but when I place at a position, it's returning to the starting position itself. What can I do? Googled a lot, but didn't get solution.

My 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;
            }
        }
    });

My 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;
        }
    });
grovile
  • 45
  • 1
  • 8

1 Answers1

-1

I Guess its already answered at android drag and drop ImageView onTouchListener.

I have pasted his content here as well

If you need to support gingerbread you can take a look at my example here

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

if you only need to support jelly bean above you can use the Drag and Drop from android library you can see it from this article

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

For some explanation about the Drag and Drop view at first you need t create the touch listener and then call startDrag to start draging. As simple as that.

private final class dragTouchListener implements 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; 
        } 
    } 

} 

To monitor the target of dropping place you can use onDragListener

private class dropListener implements 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; 
} 

} As you can see from my code there is many event but the main one is when the view is start being dragged, dropped and ended.

Don't forget to set the listener to view

tvDrag.setOnTouchListener(new dragTouchListener());
tvDrop.setOnDragListener(new dropListener())
Community
  • 1
  • 1
MRX
  • 1,400
  • 3
  • 12
  • 32