arrastrar y soltar desplazamiento automático con diseño múltiple en Android

"El desplazamiento automático no funciona muy bien cuando arrastro y suelto la imagen con diseño múltiple"

Busqué por todas partes, pero no pude encontrar una solución. Tengo una solución de este enlace:

Realiza un scroll scroll de desplazamiento automático con arrastrar y soltar en Android

@thehayro gracias por tan buen ejemplo.

pero funciona solo para un diseño y el desplazamiento automático también funciona. pero tengo más de 4-5 diseños secundarios en un diseño lineal y este diseño está en la vista de desplazamiento, mi archivo de diseño es como:

<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>

Quiero arrastrar y soltar la imagen de una a otra. No sé cómo resolverla. Lo he intentado pero podría hacerlo. No sé muy bien y mi código es:

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

Soy un principiante de Android, así que no lo sé muy bien, así que dime cómo resolverlo. Lo siento por mi mal inglés y error de gramática. gracias de antemano

Respuestas a la pregunta(1)

Su respuesta a la pregunta