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

Popular posts from this blog

java - pagination of xlsx file to XSSFworkbook using apache POI -

Unlimited choices in BASH case statement -

apache - How do I stop my index.php being run twice for every user -