2016-06-01 2 views
0

Я хочу добавить функцию перетаскивания в текстовое изображение в своем приложении для тестирования Основной макет содержит relativelayout (RL1), который содержит другой RelativeLayout (RL2) теперь RL2 содержит TextView, который может в состоянии быть перетащен где-нибудьDRAG AND DROP OF VIEW: просмотр возврата в исходное положение даже после перетаскивания в новое положение

но когда я выполнить перетаскивание на TextView его получение тащили, но пошел я падение его возвращается обратно в originsl положение помогите мне

мой 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; 
Смежные вопросы