2016-06-01 7 views
0

テストアプリケーションのテキストビューにドラッグ&ドロップ機能を追加したい メインレイアウトには、relativelayout(RL1)別のrelativelayout(RL2) 今RL2ができるがドラッグどこでもビューのドラッグアンドドロップ:新しい位置にドラッグした後でも元の位置に戻って表示

を落としたが、私はドラッグが、行ったばかりのTextViewの上でドラッグを行うとき、私はそれがそのoriginsl位置に戻るドロップすることができますのTextViewが含まれています 助けてください

あなたはあなたのビューに新しい座標を設定する必要があります私のmainactivity

public class MainActivity extends Activity 
{ 

TextView tv; 
LayoutParams lParams; 
RelativeLayout layout; 
private static final String Tv_TAG =" TV_DRAG"; 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tv = (TextView) findViewById(R.id.mainTextView1); 
    tv.setTag(Tv_TAG); 
    tv.setOnTouchListener(new MyTouchListener()); 

    layout = (RelativeLayout) findViewById(R.id. draggableRelativeLayout); 
    layout.setOnDragListener(new MyDragListener()); 
} 


private class MyTouchListener implements OnTouchListener 
{ 

    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     ClipData.Item item = new ClipData.Item((CharSequence) v.getTag()); 
     String[] mimeTypes ={ClipDescription.MIMETYPE_TEXT_PLAIN}; 
     ClipData dragData = new ClipData(v.getTag().toString(), mimeTypes, item); 

     View.DragShadowBuilder shdwbldr = new View.DragShadowBuilder(v); 

     v.startDrag(dragData, shdwbldr, v, 0); 
     v.setVisibility(View.INVISIBLE); 
     return true; 
    } 


} 

private class MyDragListener implements OnDragListener 
{ 

    @Override 
    public boolean onDrag(View v, DragEvent event) 
    { 

     View view = (View) event.getLocalState(); 

     switch (event.getAction()) { 
     case DragEvent.ACTION_DRAG_STARTED: 
      lParams =(RelativeLayout.LayoutParams)view.getLayoutParams(); 
      break; 
      case DragEvent.ACTION_DRAG_ENTERED: 

       int x_cord = (int) event.getX(); 
       int y_cord = (int) event.getY(); 

       break; 
      case DragEvent.ACTION_DRAG_EXITED: 

       x_cord = (int) event.getX(); 
       y_cord = (int) event.getY(); 
       lParams.leftMargin = x_cord; 
       lParams.topMargin = y_cord; 

       view.setLayoutParams(lParams); 

       break; 
      case DragEvent.ACTION_DROP: 
        // Dropped, reassign View to ViewGroup 

        ViewGroup owner = (ViewGroup) view.getParent(); 
        owner.removeView(view); 
        RelativeLayout container = (RelativeLayout) v; 
        container.addView(view); 
        view.setVisibility(View.VISIBLE); 
        break; 
      case DragEvent.ACTION_DRAG_ENDED: 

        break; 
      default: break; 

     } 

     return true; 
    } 
} 

} 

**私のレイアウト**

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
android:background="#AE9C9B" 
android:id="@+id/ draggableRelativeLayout "> 

<RelativeLayout 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:background="@null" 
    android:id="@+id/mainRelativeLayout1"> 

    <TextView 
     android:layout_height="wrap_content" 
     android:text="DRAG ME" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:layout_width="wrap_content" 
     android:layout_margin="10dp" 
     android:id="@+id/mainTextView1"/> 

</RelativeLayout> 

+0

は、コードを理解しますあなたはドラッグしている 'View.Shadow'を使用しています。ビューが非表示になり、影が移動しています。 [使用しているものの機能に関するドキュメントを読む](https://developer.android.com/guide/topics/ui/drag-drop.html)。 – Bonatti

+0

@Bonattiあなたは私のミスを詳しく教えてください。 – user5894647

+1

あなたはドラッグしたビューに新しい座標を設定しません。 – yennsarah

答えて

2

case DragEvent.ACTION_DROP: 
    v.setX(event.getX()); 
    v.setY(event.getY()); 
    break; 
関連する問題