Android實(shí)現(xiàn)左側(cè)滑動(dòng)菜單
本文實(shí)例為大家分享了Android實(shí)現(xiàn)左側(cè)滑動(dòng)菜單的具體代碼,供大家參考,具體內(nèi)容如下
效果圖:
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; ? ?? ?/** ?? ? * 未使用自定義屬性時(shí),調(diào)用 ?? ? *? ?? ? * @param context ?? ? * @param attrs ?? ? */ ?? ?public SlidingMenu(Context context, AttributeSet attrs) ?? ?{ ?? ??? ?this(context, attrs, 0); ?? ?} ? ?? ?/** ?? ? * 當(dāng)使用了自定義屬性時(shí),會(huì)調(diào)用此構(gòu)造方法 ?? ? *? ?? ? * @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); ?? ?} ? ?? ?/** ?? ? * 設(shè)置子View的寬和高 設(shè)置自己的寬和高 ?? ? */ ?? ?@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); ?? ?} ? ?? ?/** ?? ? * 通過設(shè)置偏移量,將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="我是左側(cè)Menu" ? ? ? ? ? ? android:textColor="#ffffff" ? ? ? ? ? ? android:textSize="20sp" /> ? ? </LinearLayout> </RelativeLayout>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android提醒微技巧你真的了解Dialog、Toast和Snackbar嗎
這篇文章主要介紹了Android提醒微技巧你真的了解Dialog、Toast和Snackbar嗎的相關(guān)資料,需要的朋友可以參考下2016-07-07Android實(shí)戰(zhàn)打飛機(jī)游戲之實(shí)現(xiàn)主角以及主角相關(guān)元素(3)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)戰(zhàn)打飛機(jī)游戲之實(shí)現(xiàn)主角以及主角相關(guān)元素,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07Android activity和view判斷滑動(dòng)
這篇文章主要介紹了Android activity和view判斷滑動(dòng)的相關(guān)資料,需要的朋友可以參考下2017-06-06Android SeekBar實(shí)現(xiàn)平滑滾動(dòng)
這篇文章主要為大家詳細(xì)介紹了Android SeekBar實(shí)現(xiàn)平滑滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03Flutter搞定寬高不統(tǒng)一布局開發(fā)的方法詳解
我們?cè)陂_發(fā)移動(dòng)端界面的時(shí)候,經(jīng)常會(huì)遇到一組尺寸不一的組件需要作為同一組展示,所以本文就將利用Wrap組件搞定寬高不統(tǒng)一布局開發(fā),需要的可以參考一下2023-06-06ImageView 實(shí)現(xiàn)Android colorPikcer 選擇器的示例代碼
本篇文章主要介紹了ImageView 實(shí)現(xiàn)Android colorPikcer 選擇器的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-10-10android時(shí)間選擇控件之TimePickerView使用方法詳解
這篇文章主要為大家詳細(xì)介紹了android時(shí)間選擇控件之TimePickerView的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09Android Studio設(shè)置主題與字體大小圖文教程
這篇文章通過圖文詳細(xì)的給大家介紹了Android Studio中如何設(shè)置主題與字體大小,文章介紹的非常詳細(xì),相信對(duì)大家學(xué)習(xí)使用Android Studio具有一定的參考借鑒價(jià)值,有需要的朋友們下面來一起看看吧。2016-10-10