2016-06-01 214 views
0

我想在我的测试应用中向文本视图添加拖放功能 主布局包含一个相关布局(RL1),其中inturn包含另外的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; 
相关问题