java - Drag LinearLayout Up And Down Only -


i need able drag linearlayout containing textview , down only.

the linearlayout child of relativelayout.

here layout file:

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

here code tried.

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

i have no idea how achieve this. copied drag , drop code tutorial on web.....

i haven't messed before, , didn't state problem, gonna go on limb , assume @ moment can drag in directions, whereas want draggable on vertical axis.

that being said, looking through code , seeing many places x axis being changed. wherever leftmargin changed code moving on horizontal axis.

try this, , see if want:

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

let me know if works you, joseph meadows


Comments