2013-04-23 32 views
2

與多個佈局落自動滾動「自動滾動不工作得非常好,當我拖多佈局下降的圖像」阻力和Android的

我找遍了,也沒有找到一個解決方案。 我得到了這個鏈接的解決方案:

Make a scrollView autoscroll with drag and drop in Android

@thehayro感謝這樣一個很好的例子。

但它只適用於一個佈局和自動滾動也工作。但我有一個線性佈局超過4-5子佈局和該佈局是在滾動查看我的佈局文件是這樣的:

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

我想將它從一個圖像拖放到另一個layout.i不知道如何解決它。我已經試過,但我可以做it.i'm不知道veryand我的代碼是:

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

我我的Android初學者所以不知道它很好使告訴我如何解決它。 對不起我的英語和語法錯誤。 感謝進步

回答

3

嘿傢伙,我已經解決了這個問題,通過myself.Here是解...

   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; 
+0

謝謝你的U解決了我的prblm – 2015-12-02 08:56:19

+0

但自動滾動到下不工作的http:// stackoverflow.com/questions/34035916/how-to-auto-scroll-the-scrollview-while-drag-and-drop – 2015-12-02 10:04:16

+0

是否檢查我的汽車向下滾動不起作用 – 2015-12-17 09:48:20