Mashi Fernando
Mashi Fernando

Reputation: 61

How to do sliding menu from right to left

I searching some sliding example,

but I still couldn't find for right to left sliding example.

Please can any one give sample project for sliding menu from right to left

Upvotes: 2

Views: 9147

Answers (3)

Mahalakshmi
Mahalakshmi

Reputation: 330

Slide menu can be done using animation classes.

Declare inside activity:

private LinearLayout slidingPanel;
private boolean isExpanded;
private DisplayMetrics metrics; 
//private ListView listView;
private RelativeLayout headerPanel,menuPanel;

private int panelWidth;
private ImageView menuViewButton;   

FrameLayout.LayoutParams menuPanelParameters;
FrameLayout.LayoutParams slidingPanelParameters;
LinearLayout.LayoutParams headerPanelParameters ;
LinearLayout.LayoutParams listViewParameters;   

//Initialize inside oncreate
metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
panelWidth = (int) ((metrics.widthPixels)*0.45);

headerPanel = (RelativeLayout) findViewById(R.id.header);
headerPanelParameters = (LinearLayout.LayoutParams) headerPanel.getLayoutParams();
headerPanelParameters.width = metrics.widthPixels;
headerPanel.setLayoutParams(headerPanelParameters);

menuPanel = (RelativeLayout) findViewById(R.id.menuPanel);
menuPanelParameters = (FrameLayout.LayoutParams) menuPanel.getLayoutParams();
menuPanelParameters.width = panelWidth;
menuPanel.setLayoutParams(menuPanelParameters);

slidingPanel = (LinearLayout) findViewById(R.id.slidingPanel);
slidingPanelParameters = (FrameLayout.LayoutParams)                 slidingPanel.getLayoutParams();
slidingPanelParameters.width = metrics.widthPixels;
slidingPanel.setLayoutParams(slidingPanelParameters);   

Slide the Panel:

menuViewButton = (ImageView) findViewById(R.id.menuViewButton);
menuViewButton.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        if(!isExpanded){
    isExpanded = true;                                          

    //Expand
    new ExpandAnimation(slidingPanel, panelWidth,
            Animation.RELATIVE_TO_SELF, 0.0f,
            Animation.RELATIVE_TO_SELF, 0.45f, 0, 0.0f, 0, 0.0f);
    //Toast.makeText(getApplicationContext(), "expand", 0).show();


        }else{
            isExpanded = false;

            //Collapse
            new CollapseAnimation(slidingPanel,panelWidth,
            TranslateAnimation.RELATIVE_TO_SELF, 0.45f,
            TranslateAnimation.RELATIVE_TO_SELF, 0.0f, 0, 0.0f, 0, 0.0f);

    //Toast.makeText(getApplicationContext(), "Collapse", 0).show();

        }              
    }
}); 

Collapse animation class:

public class CollapseAnimation extends TranslateAnimation implements TranslateAnimation.AnimationListener{

    private LinearLayout slidingLayout;
    int panelWidth;
    public CollapseAnimation(LinearLayout layout, int width, int fromXType, float fromXValue, int toXType,
            float toXValue, int fromYType, float fromYValue, int toYType, float toYValue) {

        super(fromXType, fromXValue, toXType, toXValue, fromYType, fromYValue, toYType, toYValue);

        //Initialize
        slidingLayout = layout;
        panelWidth = width;
        setDuration(400);
        setFillAfter( false );
        setInterpolator(new AccelerateDecelerateInterpolator());
        setAnimationListener(this);

        //Clear left and right margins
        LayoutParams params = (LayoutParams) slidingLayout.getLayoutParams();
        params.rightMargin = 0;
        params.leftMargin = 0;
        slidingLayout.setLayoutParams(params);
        slidingLayout.requestLayout();       
        slidingLayout.startAnimation(this);
        //slidingLayout.setBackgroundColor();
        //slidingLayout.setBackgroundColor(R.string.white);

    }
    @Override
    public void onAnimationEnd(Animation arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onAnimationRepeat(Animation arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onAnimationStart(Animation arg0) {
        // TODO Auto-generated method stub

    }

}

Expand animation class:

public class ExpandAnimation extends TranslateAnimation implements Animation.AnimationListener{
    private LinearLayout slidingLayout;
    int panelWidth;
    public ExpandAnimation(LinearLayout layout, int width, int fromXType, float fromXValue, int toXType,
            float toXValue, int fromYType, float fromYValue, int toYType, float toYValue) {

        super(fromXType, fromXValue, toXType, toXValue, fromYType, fromYValue, toYType, toYValue);

        //Initialize
        slidingLayout = layout;
        panelWidth = width;
        setDuration(400);
        setFillAfter( false );
        setInterpolator(new AccelerateDecelerateInterpolator());
        setAnimationListener(this);
        slidingLayout.startAnimation(this);
        //slidingLayout.setBackgroundColor(panelWidth);
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        // TODO Auto-generated method stub
        //Create margin and align left
                LayoutParams params = (LayoutParams) slidingLayout.getLayoutParams();
                params.leftMargin = panelWidth;
                params.gravity = Gravity.LEFT;     
                slidingLayout.clearAnimation();
                slidingLayout.setLayoutParams(params);
                slidingLayout.requestLayout();
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onAnimationStart(Animation animation) {
        // TODO Auto-generated method stub

    }

}

Here is the xml:

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <!-- Menu Panel -->

        <RelativeLayout
            android:id="@+id/menuPanel"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@drawable/gray_bg"
            android:gravity="right"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/menu_title_1"
                android:layout_width="fill_parent"
                android:layout_height="50dp"
                android:layout_alignParentTop="true"
                android:layout_marginLeft="0dp"
                android:background="#353535"
                android:gravity="center_vertical"
                android:paddingLeft="15dp"
                android:text="@string/menu_title"
                android:textColor="@android:color/white" >
            </TextView>

            <View
                android:id="@+id/menu_item_divider_1"
                android:layout_width="fill_parent"
                android:layout_height="0.5dp"
                android:layout_below="@+id/menu_title_1"
                android:layout_marginLeft="0dp"
                android:layout_marginRight="0dp"
                android:background="#b5b5b5" />

            <TextView
                android:id="@+id/menu_item_1"
                android:layout_width="fill_parent"
                android:layout_height="50dp"
                android:layout_below="@+id/menu_item_divider_1"
                android:layout_marginLeft="15dp"
                android:gravity="center_vertical"
                android:text="@string/korean" >
            </TextView>

            <View
                android:id="@+id/menu_item_divider_2"
                android:layout_width="fill_parent"
                android:layout_height="0.5dp"
                android:layout_below="@+id/menu_item_1"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:background="#b5b5b5" />

            <TextView
                android:id="@+id/menu_item_2"
                android:layout_width="fill_parent"
                android:layout_height="50dp"
                android:layout_below="@+id/menu_item_divider_2"
                android:layout_marginLeft="15dp"
                android:gravity="center_vertical"
                android:text="@string/english"
                >
            </TextView>



        <!-- Sliding Panel -->

        <LinearLayout
            android:id="@+id/slidingPanel"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/white"
            android:gravity="left"
            android:orientation="vertical" >

            <View
                android:id="@+id/dividerHeaderBottom"
                android:layout_width="fill_parent"
                android:layout_height="1dp"
                android:background="#414141" />

            <RelativeLayout
                android:id="@+id/header"
                android:layout_width="match_parent"
                android:layout_height="45dp"
                android:background="@color/whitec" >



                <Button
                    android:id="@+id/buttonback"
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:layout_alignBottom="@+id/buttonperson"
                    android:layout_alignParentTop="true"
                    android:layout_marginRight="14dp"
                    android:layout_toLeftOf="@+id/buttonperson"
                    android:background="@drawable/back" />



<ImageView
            android:id="@+id/menuViewButton"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="27dp"
            android:layout_toRightOf="@+id/buttonyummy"
            android:clickable="true"
            android:contentDescription="@string/description"
            android:src="@drawable/lin"
            android:visibility="visible" />

            </RelativeLayout>
        </LinearLayout>
    </FrameLayout>

Upvotes: 3

Rupesh
Rupesh

Reputation: 3505

use this library.. it has right to left sliding drawer also..

in the onCreate() of the activity or wherever suitable you can use following implementation..

rightDrawer = new DrawerBuilder()
    .withActivity(this)
    .withDisplayBelowStatusBar(true)
    .withSavedInstance(savedInstanceState)
    .withDrawerGravity(Gravity.END).append(leftDrawer); // or use build() instead of append()

it will add the right to left sliding drawer...

Upvotes: -1

Shani Goriwal
Shani Goriwal

Reputation: 2104

package com.slidingmenu.example;

import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;

import com.slidingmenu.example.fragments.ColorFragment;
import com.slidingmenu.lib.SlidingMenu;
import com.slidingmenu.lib.SlidingMenu.OnClosedListener;
import com.slidingmenu.lib.SlidingMenu.OnOpenedListener;


public class LeftAndRightActivity extends BaseActivity {

public LeftAndRightActivity() {
super(R.string.left_and_right);
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSlidingMenu().setMode(SlidingMenu.LEFT_RIGHT);
getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

setContentView(R.layout.content_frame);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, new SampleListFragment())
.commit();

getSlidingMenu().setSecondaryMenu(R.layout.menu_frame_two);
getSlidingMenu().setSecondaryShadowDrawable(R.drawable.shadowright);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.menu_frame_two, new SampleListFragment())
.commit();
}

}

Make sure to get a clean and updated copy of the library as well. Just in case.

Upvotes: 3

Related Questions