title: drag and drop auto scroll with multiple layout in android
body: <p>"auto scroll not working very well when i drag and drop the image with multiple layout"</p>
  
  <p>I searched all over, but could not find a solution.
  i got a solution from this link:</p>
  
  <p><a href="https://stackoverflow.com/questions/7352236/make-a-scrollview-autoscroll-with-drag-and-drop-in-android/7366321#7366321">Make a scrollView autoscroll with drag and drop in Android</a></p>
  
  <p>@thehayro thanks for such a nice example.</p>
  
  <p>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:</p>
  
  <pre><code>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" &gt;
  &lt;com.example.dragvdropdemo.MyScrollView
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:id="@+id/scroll_view"&gt;
  &lt;LinearLayout 
   android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:id="@+id/lldrag"&gt;
  
  &lt;LinearLayout
      android:layout_width="match_parent"
      android:layout_height="200dip" 
      android:id="@+id/ll1"
      android:layout_marginTop="10dip"
       android:background="@android:color/darker_gray"&gt;
  
      &lt;ImageView
          android:id="@+id/imageView1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/dr_logo" /&gt;
  
      &lt;ImageView
          android:id="@+id/imageView2"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/ic_launcher" /&gt;
  
      &lt;ImageView
          android:id="@+id/imageView3"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/fb" /&gt;
  
  &lt;/LinearLayout&gt;
  
  &lt;LinearLayout
      android:layout_width="match_parent"
      android:layout_height="200dip" 
      android:id="@+id/ll2"
      android:layout_marginTop="10dip"
      android:background="@android:color/darker_gray"&gt;
  
  
      &lt;ImageView
          android:id="@+id/ImageView01"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/twitter" /&gt;
  
      &lt;ImageView
          android:id="@+id/ImageView02"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/ic_launcher" /&gt;
  
      &lt;ImageView
          android:id="@+id/ImageView03"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/ic_launcher" /&gt;
  &lt;/LinearLayout&gt;
  &lt;LinearLayout
      android:layout_width="match_parent"
      android:layout_height="200dip" 
      android:id="@+id/ll3"
      android:layout_marginTop="10dip"
       android:background="@android:color/darker_gray"&gt;
  
  
      &lt;ImageView
          android:id="@+id/ImageView1_l3"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/twitter" /&gt;
  
      &lt;ImageView
          android:id="@+id/ImageView2_l3"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/ic_launcher" /&gt;
  
      &lt;ImageView
          android:id="@+id/ImageView3_l3"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/ic_launcher" /&gt;
  &lt;/LinearLayout&gt;
  &lt;LinearLayout
      android:layout_width="match_parent"
      android:layout_height="200dip" 
      android:id="@+id/ll4"
      android:layout_marginTop="10dip"
       android:background="@android:color/darker_gray"&gt;
  
  
      &lt;ImageView
          android:id="@+id/ImageView1_l4"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/twitter" /&gt;
  
      &lt;ImageView
          android:id="@+id/ImageView2_l4"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/ic_launcher" /&gt;
  
      &lt;ImageView
          android:id="@+id/ImageView3_l4"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/ic_launcher" /&gt;
  &lt;/LinearLayout&gt;
  &lt;/LinearLayout&gt;
   &lt;/com.example.dragvdropdemo.MyScrollView&gt;
  </code></pre>
  
  <p></p>
  
  <p>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:</p>
  
  <pre><code>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 &lt; 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 &gt; 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;
      }
  
  } 
  }
  </code></pre>
  
  <p>MySrollView</p>
  
  <pre><code>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);
      }
  }
  </code></pre>
  
  <p>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</p>