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
Post a Comment