100KDroid : Android Facebook Style Slide

Hello World!!!!!

Android Facebook Style Slide

Using Android Facebook Style Slide:: 
This Tutorial describes how to use Android Facebook Style Slide in Android.In this example we have simply created two layouts and include one layout into another using include tag and created two java classes to full fill our needs.
Below is given the code for these layouts and classes...

First xml file is our main xml file which includes another layout called anotherlayout.xml 


1.activity_main.xml
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <RelativeLayout

        android:id="@+id/find_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <RelativeLayout

        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:padding="2dp"
        android:background="#000">

        <Button

            android:id="@+id/filter"
            android:layout_width="40dp"
            android:layout_height="30dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:background="@drawable/ic_launcher" />

        <TextView

            android:id="@+id/city"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/filter"
            android:layout_centerVertical="true"
            android:layout_marginLeft="3sp"
            android:layout_marginTop="3sp"
            android:text="Slider"
            android:textSize="22sp"
            android:textStyle="bold"
            android:textColor="@android:color/primary_text_dark"/>

     

         <Button
            android:id="@+id/settings"
             android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_width="40dp"
            android:layout_height="30dp"
            android:background="@drawable/ic_launcher" />
         <Button
            android:id="@+id/create"
            android:layout_toLeftOf="@+id/settings"
            android:layout_centerVertical="true"
            android:layout_width="40dp"
            android:layout_height="30dp"
            android:background="@drawable/ic_launcher" />

    </RelativeLayout>

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:background="#fff"
    android:layout_below="@+id/header" >
          <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="You can add here anything" />
 

</RelativeLayout>


 

    </RelativeLayout>

    <include

        layout="@layout/anotherlayout"/>
</RelativeLayout>
anotherlayout.xml::
anotherlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/filter_layout"
    android:layout_width="260sp"
    android:layout_height="300sp"
    android:background="#fff"
    android:visibility="invisible" >

    <Button

        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="32dp"
        android:layout_marginTop="32dp"
        android:text="First One" />

    <Button

        android:id="@+id/button2"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginTop="20dp"
        android:text="Second  One" />

</RelativeLayout>
After the layout xml files its tme for animation xml files which we used in the application project which are placed under the anim folder.
Our first anim xml file is other_slide_out.xml followed by the other animation xml files

1.other_slide_out.xml
other_slide_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/decelerate_interpolator" >

    <translate

        android:fromXDelta="0%"
        android:toXDelta="80%"
        android:duration="1000"
        android:fillEnabled="true"/>

</set>
2.other_slide_in.xml
other_slide_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/decelerate_interpolator" >

    <translate

        android:fromXDelta="0%"
        android:toXDelta="-80%"
        android:duration="1000"
        android:fillEnabled="true"/>

</set>
3.filter_slide_in.xml
filter_slide_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/decelerate_interpolator" >

    <translate

        android:fromXDelta="0%"
        android:toXDelta="-80%"
        android:duration="1000"
        android:fillEnabled="true"/>

</set>
4.filter_slide_out.xml
filter_slide_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/decelerate_interpolator">

    <translate 

        android:fromXDelta="0%"
        android:toXDelta="-100%"
        android:duration="1000"/>

</set>
After xml files it's time to introduce to java files used in the Project .First java file is MainActivity.java followed by the FilterAnimation.java.

5.MainActivity.java
MainActivity.java
package com.shokeen.slider;

import android.app.ActionBar;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.Button;
import android.widget.RelativeLayout;

public class MainActivity extends Activity implements OnClickListener {

RelativeLayout filterLayout, findLayout, actionbar;
Context context = this;
Button btFilter, bcreate;

FilterAnimation filterAnimation;


@Override

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

filterLayout = (RelativeLayout) findViewById(R.id.filter_layout);

bcreate = (Button) findViewById(R.id.create);
actionbar = (RelativeLayout) findViewById(R.id.header);
findLayout = (RelativeLayout) findViewById(R.id.find_layout);
ActionBar a = getActionBar();
a.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
a.hide();
btFilter = (Button) findViewById(R.id.filter);
btFilter.setOnClickListener(this);

filterAnimation = new FilterAnimation(this);


initializeAnimations();

}


private void initializeAnimations() { 

final ViewTreeObserver filterObserver = filterLayout

.getViewTreeObserver();

filterObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {


@SuppressWarnings("deprecation")

@Override
public void onGlobalLayout() {
filterLayout.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);

DisplayMetrics displayMetrics = getResources()

.getDisplayMetrics();

int deviceWidth = displayMetrics.widthPixels;


int filterLayoutWidth = (deviceWidth * 80) / 100; 


RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(

filterLayoutWidth,
RelativeLayout.LayoutParams.WRAP_CONTENT);

filterLayout.setLayoutParams(params);


filterAnimation.initializeFilterAnimations(filterLayout);


}

});

final ViewTreeObserver findObserver = findLayout.getViewTreeObserver();


findObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {


@SuppressWarnings("deprecation")

@Override
public void onGlobalLayout() {
findLayout.getViewTreeObserver().removeGlobalOnLayoutListener(
this);

filterAnimation.initializeOtherAnimations(findLayout);

}
});

}


@Override

public void onClick(View v) {
int id = v.getId();

switch (id) {


case R.id.filter:


filterAnimation.toggleSliding();


break;

}
}

}
6.FilterAnimation.java
FilterAnimation.java
package com.shokeen.slider;

import android.content.Context;

import android.util.DisplayMetrics;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.RelativeLayout;

public class FilterAnimation implements AnimationListener {


Context context;


   RelativeLayout filterLayout, otherLayout;


   private Animation filterSlideIn, filterSlideOut, otherSlideIn, otherSlideOut;


   private static int otherLayoutWidth, otherLayoutHeight;


   private boolean isOtherSlideOut = false;


   private int deviceWidth;


   private int margin;


   public FilterAnimation(Context context) 

   {
       this.context = context;

       DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();


       deviceWidth = displayMetrics.widthPixels; // as my animation is x-axis related so i gets the device width and will use that width,so that this sliding menu will work fine in all screen resolutions

   }

   public void initializeFilterAnimations(RelativeLayout filterLayout)

   {
       this.filterLayout = filterLayout;

       filterSlideIn = AnimationUtils.loadAnimation(context, R.anim.filter_slide_in);


       filterSlideOut = AnimationUtils.loadAnimation(context, R.anim.filter_slide_out);    


   }


   public void initializeOtherAnimations(RelativeLayout otherLayout)

   {       
       this.otherLayout = otherLayout;

       otherLayoutWidth = otherLayout.getWidth();


       otherLayoutHeight = otherLayout.getHeight();



       otherSlideIn = AnimationUtils.loadAnimation(context, R.anim.other_slide_in);

       otherSlideIn.setAnimationListener(this);

       otherSlideOut = AnimationUtils.loadAnimation(context, R.anim.other_slide_out);

       otherSlideOut.setAnimationListener(this);
   }

   public void toggleSliding()

   {
       if(isOtherSlideOut) //check if findLayout is already slided out so get so animate it back to initial position
       {       
           filterLayout.startAnimation(filterSlideOut);

           filterLayout.setVisibility(View.INVISIBLE);


           otherLayout.startAnimation(otherSlideIn);

       }
       else //slide findLayout Out and filterLayout In
       {
           otherLayout.startAnimation(otherSlideOut);

           filterLayout.setVisibility(View.VISIBLE);


           filterLayout.startAnimation(filterSlideIn);

       }
   }

   @Override

   public void onAnimationEnd(Animation animation) 
   {
       if(isOtherSlideOut) //Now here we will actually move our view to the new position,because animations just move the pixels not the view
       {
           RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(otherLayoutWidth, otherLayoutHeight);

           otherLayout.setLayoutParams(params);


           isOtherSlideOut = false;

       }
       else
       {   
           margin = (deviceWidth * 80) / 100; //here im coverting device percentage width into pixels, in my other_slide_in.xml or other_slide_out.xml you can see that i have set the android:toXDelta="80%",so it means the layout will move to 80% of the device screen,to work across all screens i have converted percentage width into pixels and then used it



           RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(otherLayoutWidth, otherLayoutHeight);


           params.leftMargin = margin;


           params.rightMargin = -margin; //same margin from right side (negavite) so that our layout won't get shrink


           otherLayout.setLayoutParams(params);


           isOtherSlideOut = true;


           dimOtherLayout();

       }
   }

   @Override

   public void onAnimationRepeat(Animation animation) 
   {

   }


   @Override

   public void onAnimationStart(Animation animation) 
   {

   }


   private void dimOtherLayout()

   {
       AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.5f);

       alphaAnimation.setFillAfter(true);


       otherLayout.startAnimation(alphaAnimation);

   }
}

Output::

No comments:

Post a Comment

Copyright © 100KDroid Urang-kurai