Android实现左侧滑动菜单

Tulla ·
更新时间:2024-09-20
· 1027 次阅读

本文实例为大家分享了Android实现左侧滑动菜单的具体代码,供大家参考,具体内容如下

效果图:

SlideActivity.java:

package com.demo.slide; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import com.demo.broadcast.R; public class SlideActivity extends Activity {     private SlidingMenu mLeftMenu ;      @Override     protected void onCreate(Bundle savedInstanceState)     {         super.onCreate(savedInstanceState);         requestWindowFeature(Window.FEATURE_NO_TITLE);         setContentView(R.layout.slide_main);         mLeftMenu = (SlidingMenu) findViewById(R.id.id_menu);     }     public void toggleMenu(View view)     {         mLeftMenu.toggle();     } }

SlidingMenu.java:

package com.demo.slide; import android.content.Context; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.MotionEvent; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.HorizontalScrollView; import android.widget.LinearLayout; public class SlidingMenu extends HorizontalScrollView {     private LinearLayout mWapper;     private ViewGroup mMenu;     private ViewGroup mContent;     private int mScreenWidth;     private int mMenuWidth;     // dp     private int mMenuRightPadding = 80;     private boolean once;     private boolean isOpen;     /**      * 未使用自定义属性时,调用      *       * @param context      * @param attrs      */     public SlidingMenu(Context context, AttributeSet attrs)     {         this(context, attrs, 0);     }     /**      * 当使用了自定义属性时,会调用此构造方法      *       * @param context      * @param attrs      * @param defStyle      */     public SlidingMenu(Context context, AttributeSet attrs, int defStyle)     {         super(context, attrs, defStyle);         WindowManager wm = (WindowManager) context                 .getSystemService(Context.WINDOW_SERVICE);         DisplayMetrics outMetrics = new DisplayMetrics();         wm.getDefaultDisplay().getMetrics(outMetrics);         mScreenWidth = outMetrics.widthPixels;         mMenuRightPadding = (int) TypedValue.applyDimension(                 TypedValue.COMPLEX_UNIT_DIP, 50, context                 .getResources().getDisplayMetrics());     }     public SlidingMenu(Context context)     {         this(context, null);     }     /**      * 设置子View的宽和高 设置自己的宽和高      */     @Override     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)     {         if (!once)         {             mWapper = (LinearLayout) getChildAt(0);             mMenu = (ViewGroup) mWapper.getChildAt(0);             mContent = (ViewGroup) mWapper.getChildAt(1);             mMenuWidth = mMenu.getLayoutParams().width = mScreenWidth                     - mMenuRightPadding;             mContent.getLayoutParams().width = mScreenWidth;             once = true;         }         super.onMeasure(widthMeasureSpec, heightMeasureSpec);     }     /**      * 通过设置偏移量,将menu隐藏      */     @Override     protected void onLayout(boolean changed, int l, int t, int r, int b)     {         super.onLayout(changed, l, t, r, b);         if (changed)         {             this.scrollTo(mMenuWidth, 0);         }     }     @Override     public boolean onTouchEvent(MotionEvent ev)     {         int action = ev.getAction();         switch (action)         {         case MotionEvent.ACTION_UP:             // 隐藏在左边的宽度             int scrollX = getScrollX();             if (scrollX >= mMenuWidth / 2)             {                 this.smoothScrollTo(mMenuWidth, 0);                 isOpen = false;             } else             {                 this.smoothScrollTo(0, 0);                 isOpen = true;             }             return true;         }         return super.onTouchEvent(ev);     }     /**      * 打开菜单      */     public void openMenu()     {         if (isOpen)             return;         this.smoothScrollTo(0, 0);         isOpen = true;     }     public void closeMenu()     {         if (!isOpen)             return;         this.smoothScrollTo(mMenuWidth, 0);         isOpen = false;     }     /**      * 切换菜单      */     public void toggle()     {         if (isOpen)         {             closeMenu();         } else         {             openMenu();         }     } }

slide_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent" >     <com.demo.slide.SlidingMenu         android:id="@+id/id_menu"         android:layout_width="match_parent"         android:layout_height="match_parent" >         <LinearLayout             android:layout_width="wrap_content"             android:layout_height="match_parent"             android:orientation="horizontal" >             <include layout="@layout/left_menu" />             <LinearLayout                 android:layout_width="match_parent"                 android:layout_height="match_parent"                 android:background="#ffffff" >                 <Button                     android:layout_width="wrap_content"                     android:layout_height="wrap_content"                     android:onClick="toggleMenu"                     android:text="切换" />                 <TextView                     android:layout_width="wrap_content"                     android:layout_height="wrap_content"                     android:layout_gravity="center"                     android:layout_marginLeft="20dp"                     android:text="我是主content"                     android:textColor="#ff00ff"                     android:textSize="20sp" />             </LinearLayout>         </LinearLayout>     </com.demo.slide.SlidingMenu> </RelativeLayout>

left_menu.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"     android:background="#000000" >     <LinearLayout         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_centerInParent="true"         android:orientation="vertical" >         <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_marginLeft="20dp"             android:text="我是左侧Menu"             android:textColor="#ffffff"             android:textSize="20sp" />     </LinearLayout> </RelativeLayout>



菜单 Android

需要 登录 后方可回复, 如果你还没有账号请 注册新账号