android swapping two views using animation when click on imagebutton -
i have seen questions in stack on flow, tried,
android translate animation swapping 2 views
but nothing worked scenario, want swap swap_above linear layout , swap_below linear layouts when click on swap image button. if possible apply animation swap imagebutton also, when views being swapped.
thank you,
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <framelayout android:layout_width="match_parent" android:layout_height="wrap_content"> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <linearlayout android:id="@+id/from" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center_vertical" android:orientation="vertical" android:paddingbottom="25dp" android:paddingleft="25dp" android:paddingright="25dp" android:paddingtop="15dp"> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="from" android:textstyle="bold" /> <linearlayout android:id="@+id/swap_above" android:layout_width="match_parent" android:layout_height="wrap_content"> <linearlayout android:id="@+id/from_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="20dp" android:orientation="horizontal"> <textview android:id="@+id/from_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableleft="@drawable/seek_thumb_pressed" android:drawablepadding="5dp" android:text="bangalore" android:textsize="20dp" /> <textview android:id="@+id/from_place" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:text=" (blr)" android:textsize="15dp" /> </linearlayout> </linearlayout> </linearlayout> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:orientation="horizontal"> <view android:layout_width="0dp" android:layout_height="0.5dp" android:layout_marginleft="20dp" android:layout_weight="1" android:background="#fff" /> <view android:layout_width="60dp" android:layout_height="0dp" /> </linearlayout> <linearlayout android:id="@+id/to" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center_vertical" android:orientation="vertical" android:paddingbottom="25dp" android:paddingleft="25dp" android:paddingright="25dp" android:paddingtop="15dp"> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="to" android:textstyle="bold" /> <linearlayout android:id="@+id/swap_below" android:layout_width="match_parent" android:layout_height="wrap_content"> <linearlayout android:id="@+id/to_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="20dp" android:orientation="horizontal"> <textview android:id="@+id/to_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableleft="@drawable/seek_thumb_normal" android:drawablepadding="5dp" android:text="hyderabad" android:textsize="20dp" /> <textview android:id="@+id/to_place" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:text=" (hyd)" android:textsize="15dp" /> </linearlayout> </linearlayout> </linearlayout> </linearlayout> <imagebutton android:id="@+id/swap" android:layout_width="60dp" android:layout_height="60dp" android:layout_gravity="center_vertical|end" android:background="?android:attr/selectableitembackground" android:src="@drawable/seek_thumb_disabled" /> </framelayout> </linearlayout>
first - set below xml attributes each target view's parent may blocking animation :
android:clipchildren="false" android:cliptopadding="false" you need set attributes @ 3 places in case.
read more clipchildren & cliptopadding here - http://developer.android.com/reference/android/view/viewgroup.html#attr_android:clipchildren http://developer.android.com/reference/android/view/viewgroup.html#attr_android:cliptopadding
if minsdk >=12
use swap animation :
findviewbyid(r.id.swap).setonclicklistener(new view.onclicklistener() { boolean isanimating; @override public void onclick(view v) { if(isanimating) return; isanimating=true; view v1 = findviewbyid(r.id.swap_above); view v2 = findviewbyid(r.id.swap_below); float x1, y1, x2, y2; x1 = getrelativex(v1);//use v1.getx() if v1 & v2 have same parent y1 = getrelativey(v1);//use v1.gety() if v1 & v2 have same parent x2 = getrelativex(v2);//use v2.getx() if v1 & v2 have same parent y2 = getrelativey(v2);//use v2.gety() if v1 & v2 have same parent float x_displacement = (x2-x1); float y_displacement = (y2-y1); v1.animate().xby(x_displacement).yby(y_displacement); v2.animate().xby(-x_displacement).yby(-y_displacement); long anim_duration = v1.animate().getduration(); //wait till animation on set isanimating false //take 10 ms buffer time ensure proper functioning //if remove timer & isanimating variable, animation function improperly when user rapidly clicks on swap button new countdowntimer(anim_duration + 10, anim_duration + 10) { @override public void ontick(long millisuntilfinished) { } @override public void onfinish() { isanimating=false; } }.start(); } //returns x-pos relative root layout private float getrelativex(view myview) { if (myview.getparent() == myview.getrootview()) return myview.getx(); else return myview.getx() + getrelativex((view) myview.getparent()); } //returns y-pos relative root layout private float getrelativey(view myview) { if (myview.getparent() == myview.getrootview()) return myview.gety(); else return myview.gety() + getrelativey((view) myview.getparent()); } }); read view property animator here - http://developer.android.com/reference/android/view/viewpropertyanimator.html http://developer.android.com/guide/topics/graphics/prop-animation.html
also, should try minimize number of views in layout. read layout optimization here - http://developer.android.com/training/improving-layouts/optimizing-layout.html
Comments
Post a Comment