0

Мне нужно уметь перетаскивать LinearLayout, содержащий TextView вверх и вниз.Перетащите LinearLayout вверх и вниз

LinearLayout является дочерним предприятием RelativeLayout.

Вот мой файл макета:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
tools:context=".MainActivity"> 





     <LinearLayout 
      android:id="@+id/drag" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#55000000" 
      > 


     <TextView 
     android:id="@+id/display" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
      android:gravity="center" 
     android:textSize="30sp" 
     android:textColor="#fff" 
     android:textStyle="bold" 
      android:layout_gravity="center" 
     android:text="The Quick Brown Fox Jumped!!" 
     android:padding="15dp" 
     /> 
     </LinearLayout> 





</RelativeLayout> 

вот код я попробовал.

LinearLayout dragqueen; 
dragqueen = (LinearLayout) findViewById(R.id.drag); 

    findViewById(R.id.drag).setOnTouchListener(new View.OnTouchListener() 
    { 
     int prevX,prevY; 

     @Override 
     public boolean onTouch(final View v,final MotionEvent event) 
     { 
      final FrameLayout.LayoutParams par=(FrameLayout.LayoutParams)v.getLayoutParams(); 
      switch(event.getAction()) 
      { 
       case MotionEvent.ACTION_MOVE: 
       { 
        par.topMargin+=(int)event.getRawY()-prevY; 
        prevY=(int)event.getRawY(); 
        par.leftMargin+=(int)event.getRawX()-prevX; 
        prevX=(int)event.getRawX(); 
        v.setLayoutParams(par); 
        return true; 
       } 
       case MotionEvent.ACTION_UP: 
       { 
        par.topMargin+=(int)event.getRawY()-prevY; 
        par.leftMargin+=(int)event.getRawX()-prevX; 
        v.setLayoutParams(par); 
        return true; 
       } 
       case MotionEvent.ACTION_DOWN: 
       { 
        prevX=(int)event.getRawX(); 
        prevY=(int)event.getRawY(); 
        par.bottomMargin=-2*v.getHeight(); 
        par.rightMargin=-2*v.getWidth(); 
        v.setLayoutParams(par); 
        return true; 
       } 
      } 
      return false; 
     } 
    }); 

Я понятия не имею, как достичь этого. Я скопировал код перетаскивания из учебника в Интернете .....

ответ

1

Я не испортил это раньше, и вы на самом деле не говорили о проблеме, но я собираюсь пойти на конечность и предположим, что в данный момент вы можете перетащить его во всех направлениях, тогда как вы хотите, чтобы его можно было перетаскивать по вертикальной оси.

Это, как говорится, я просматриваю ваш код и вижу много мест, где изменяется ось x. Везде, где изменяется левый Маргин, находится код, движущийся по горизонтальной оси.

Попробуйте это, и посмотреть, если это делает то, что вы хотите:

@Override 
    public boolean onTouch(final View v,final MotionEvent event) 
    { 
     final FrameLayout.LayoutParams par=(FrameLayout.LayoutParams)v.getLayoutParams(); 
     switch(event.getAction()) 
     { 
      case MotionEvent.ACTION_MOVE: 
      { 
       par.topMargin+=(int)event.getRawY()-prevY; 
       prevY=(int)event.getRawY(); 
       v.setLayoutParams(par); 
       return true; 
      } 
      case MotionEvent.ACTION_UP: 
      { 
       par.topMargin+=(int)event.getRawY()-prevY; 
       v.setLayoutParams(par); 
       return true; 
      } 
      case MotionEvent.ACTION_DOWN: 
      { 
       prevY=(int)event.getRawY(); 
       par.bottomMargin=-2*v.getHeight(); 
       v.setLayoutParams(par); 
       return true; 
      } 
     } 
     return false; 
    } 

Позвольте мне знать, если это работает для вас, Джозеф Meadows

Смежные вопросы