Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

drag and drop auto scroll with multiple layout in android

"auto scroll not working very well when i drag and drop the image with multiple layout"

I searched all over, but could not find a solution. i got a solution from this link:

Make a scrollView autoscroll with drag and drop in Android

@thehayro thanks for such a nice example.

but it is working for only one layout and auto scroll is also worked. but i have more than 4-5 child layout in one linear layout and this layout is in the scroll view my layout file is like:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.example.dragvdropdemo.MyScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/scroll_view">
<LinearLayout 
 android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/lldrag">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="200dip" 
    android:id="@+id/ll1"
    android:layout_marginTop="10dip"
     android:background="@android:color/darker_gray">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/dr_logo" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/fb" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="200dip" 
    android:id="@+id/ll2"
    android:layout_marginTop="10dip"
    android:background="@android:color/darker_gray">


    <ImageView
        android:id="@+id/ImageView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/twitter" />

    <ImageView
        android:id="@+id/ImageView02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/ImageView03"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />
</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="200dip" 
    android:id="@+id/ll3"
    android:layout_marginTop="10dip"
     android:background="@android:color/darker_gray">


    <ImageView
        android:id="@+id/ImageView1_l3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/twitter" />

    <ImageView
        android:id="@+id/ImageView2_l3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/ImageView3_l3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />
</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="200dip" 
    android:id="@+id/ll4"
    android:layout_marginTop="10dip"
     android:background="@android:color/darker_gray">


    <ImageView
        android:id="@+id/ImageView1_l4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/twitter" />

    <ImageView
        android:id="@+id/ImageView2_l4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:id="@+id/ImageView3_l4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />
</LinearLayout>
</LinearLayout>
 </com.example.dragvdropdemo.MyScrollView>

i want to drag and drop image from one to another layout.i don't know how to solve it. i have tried but i could do it.i'm don't know veryand my code is:

public class MyActivity extends Activity {


ImageView   img1,img2,img3,img01;
ImageView img02,img03,img1_l3,img2_l3,img3_l3,img1_l4,img2_l4,img3_l4;
LinearLayout ll1,ll2,ll3,ll4,lldrag;

MyScrollView myScrollView;
int mScrollDistance;

private static int oldvalue;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylist);

    //SCROLLVIEW
       myScrollView = (MyScrollView) findViewById(R.id.scroll_view);
         myScrollView.setOnScrollViewListener(new         MyScrollView.OnScrollViewListener() {

            @Override
            public void onScrollChanged1(OnScrollViewListener listener) {
                // TODO Auto-generated method stub
                mScrollDistance = myScrollView.getScrollY();
            }
        });

    img1 = (ImageView)findViewById(R.id.imageView1);
    img2 = (ImageView)findViewById(R.id.imageView2);
    img3 = (ImageView)findViewById(R.id.imageView3);
    img01 = (ImageView)findViewById(R.id.ImageView01);
    img02 = (ImageView)findViewById(R.id.ImageView02);
    img03 = (ImageView)findViewById(R.id.ImageView03);
    img1_l3 = (ImageView)findViewById(R.id.ImageView1_l3);
    img2_l3 = (ImageView)findViewById(R.id.ImageView2_l3);
    img3_l3 = (ImageView)findViewById(R.id.ImageView3_l3);
    img1_l4 = (ImageView)findViewById(R.id.ImageView1_l4);
    img2_l4 = (ImageView)findViewById(R.id.ImageView2_l4);
    img3_l4 = (ImageView)findViewById(R.id.ImageView3_l4);
    ll1 = (LinearLayout)findViewById(R.id.ll1);
    ll2 = (LinearLayout)findViewById(R.id.ll2);
    ll3 = (LinearLayout)findViewById(R.id.ll3);
    ll4 = (LinearLayout)findViewById(R.id.ll4);
    lldrag = (LinearLayout)findViewById(R.id.lldrag);

    img1.setOnTouchListener(new ChoiceTouchListener());
    img2.setOnTouchListener(new ChoiceTouchListener());
    img3.setOnTouchListener(new ChoiceTouchListener());
    img01.setOnTouchListener(new ChoiceTouchListener());
    img02.setOnTouchListener(new ChoiceTouchListener());
    img03.setOnTouchListener(new ChoiceTouchListener());
    img1_l3.setOnTouchListener(new ChoiceTouchListener());
    img2_l3.setOnTouchListener(new ChoiceTouchListener());
    img3_l3.setOnTouchListener(new ChoiceTouchListener());
    img1_l4.setOnTouchListener(new ChoiceTouchListener());
    img2_l4.setOnTouchListener(new ChoiceTouchListener());
    img3_l4.setOnTouchListener(new ChoiceTouchListener());

    ll1.setOnDragListener(new ChoiceDragListener());
    ll2.setOnDragListener(new ChoiceDragListener());
    ll3.setOnDragListener(new ChoiceDragListener());
    ll4.setOnDragListener(new ChoiceDragListener());
    lldrag.setOnDragListener(new ChoiceDragListener());


}

private final class ChoiceTouchListener implements OnTouchListener {

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        // TODO Auto-generated method stub


        ClipData data=ClipData.newPlainText("", "");
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
        //start dragging the item touched''
        view.startDrag(data, shadowBuilder, view, 0);
        return true;
    } 
} 

/**
 * DragListener will handle dragged views being dropped on the drop area
 * - only the drop action will have processing added to it as we are not
 * - amending the default behavior for other parts of the drag process
 *
 */
class ChoiceDragListener implements OnDragListener {



    @Override
    public boolean onDrag(View v, DragEvent event) {
        switch (event.getAction()) {
        case DragEvent.ACTION_DRAG_STARTED:
            //no action necessary
            Log.i("", "DRAGSTARTED");
            break;
        case DragEvent.ACTION_DRAG_ENTERED:
            //no action necessary
            Log.i("","DRAGENTERED");
            break;
        case DragEvent.ACTION_DRAG_EXITED:        
            //no action necessary
            Log.i("","DRAGEXITED");
            break;
        case DragEvent.ACTION_DROP:
            //handle the dragged view being dropped over a drop view
            Log.i("","DROP");
            View view = (View) event.getLocalState();

            LinearLayout ll=(LinearLayout) view.getParent();
            ll.removeView(view);
            LinearLayout dropTarget = (LinearLayout) v;
            ImageView dropped = (ImageView) view;

            dropTarget.addView(dropped,0);

            Object tag = dropTarget.getTag();

            if(tag!=null)
            {

                int existingID = (Integer)tag;

                findViewById(existingID).setVisibility(View.VISIBLE);
            }
            //set the tag in the target view being dropped on - to the ID of the view being dropped
            dropTarget.setTag(dropped.getId());
            break;

        case DragEvent.ACTION_DRAG_LOCATION:
            //no action necessary
            int y = Math.round(event.getY());
              int translatedY = y - mScrollDistance;
              Log.i("translated",""+translatedY+" "+ mScrollDistance+" "+y);
              int threshold =50 ;
              // make a scrolling up due the y has passed the threshold
              if (translatedY < threshold) {
                 // make a scroll up by 30 px
                 myScrollView.scrollBy(0, -30);
              }
              // make a autoscrolling down due y has passed the 500 px border
              if (translatedY + threshold > 200) {
                 // make a scroll down by 30 px
                 myScrollView.scrollBy(0, 30);
              }
            break;

        case DragEvent.ACTION_DRAG_ENDED:
            //no action necessary
            break;
        default:
            break;
        }
        return true;
    }

} 
}

MySrollView

public class MyScrollView  extends ScrollView {

public OnScrollViewListener mListener;

public MyScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
    // TODO Auto-generated method stub
    super.onScrollChanged(l, t, oldl, oldt);
    if (mListener != null) {
         mListener.onScrollChanged1(mListener);
     }
}

public void setOnScrollViewListener(OnScrollViewListener listener) {
    mListener = listener;
}
public static interface OnScrollViewListener {
       public void onScrollChanged1(OnScrollViewListener listener);
    }
}

i'm android beginner so don't know it very well so tell me how to solve it. sorry for my bad english and grammer mistake. thanks in advances

like image 672
Bitu Patel Avatar asked Dec 17 '25 04:12

Bitu Patel


1 Answers

I solved this problem by myself. Here is the solution:

  DragEvent.ACTION_DRAG_LOCATION:
  //no action necessary
  int y = Math.round(v.getY())+Math.round(event.getY());
      int translatedY = y - mScrollDistance;
      Log.i("translated",""+translatedY+" "+ mScrollDistance+" "+y);
      int threshold =50 ;
      // make a scrolling up due the y has passed the threshold
      if (translatedY < 200) {
         // make a scroll up by 30 px
         myScrollView.smoothScrollBy(0, -15);
      }
      // make a autoscrolling down due y has passed the 500 px border
      if (translatedY + threshold > 500) {
         // make a scroll down by 30 px
         myScrollView.smoothScrollBy(0, 15);
      }
     
    break;
like image 51
Bitu Patel Avatar answered Dec 19 '25 21:12

Bitu Patel



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!