`

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>

 

  • 大小: 6.4 KB
  • 大小: 8.6 KB
分享到:
评论

相关推荐

    Android学习之左侧滑动菜单

    在Android应用开发中,左侧滑动菜单是一种常见的交互设计,它允许用户通过从屏幕左侧滑动来显示或隐藏一个侧边栏,通常包含导航选项、设置等。这种设计模式在许多移动应用中都能看到,例如Google Maps、Facebook等。...

    Android左右滑动菜单

    1. **使用第三方库**:Android社区中有许多成熟的开源库可以方便地实现滑动菜单,如`SlidingMenu`库。这个库由Jeremy Feinstein开发,允许开发者轻松创建类似Google Play商店的左侧滑动菜单。`SlidingMenu`库支持...

    android sliding menu 滑动菜单

    在本篇文章中,我们将深入探讨如何在Android项目中实现滑动菜单,主要关注`SlidingMenu`库的使用。 首先,我们需要了解`SlidingMenu`库。这是一个开源项目,由杰里米·范德韦尔(Jeremy Feinstein)创建,专门用于...

    仿qq滑动菜单

    在Android应用开发中,"仿QQ滑动菜单"是一种常见的设计模式,用于实现类似QQ应用那样的侧滑导航功能。这种菜单通常隐藏在屏幕边缘,用户可以通过手势或按钮触发,显示一列可选的操作或者功能。它提升了用户体验,...

    Android双向滑动菜单带按钮版

    本文将详细解析"Android双向滑动菜单带按钮版"这一主题,结合标签"Android", "双向滑动", "滑动菜单", "slidemenu"和"特效",以及压缩包中的"BidirSlidingLayout"文件,我们将深入讨论如何实现一个具有双向滑动功能...

    Android滑动菜单框架完全解析,教你如何一分钟实现滑动菜单特效demo

    本教程将全面解析一个Android滑动菜单框架的实现过程,帮助开发者在一分钟内创建具有滑动菜单特效的demo。 首先,我们要理解滑动菜单的基本原理。滑动菜单通常是通过在主布局中添加一个覆盖整个屏幕的全屏布局,...

    android左侧或右侧可选滑动菜单

    以上就是实现Android左侧或右侧滑动菜单所需的关键知识点。通过理解并应用这些概念,开发者可以创建出符合现代移动应用设计标准的交互式菜单。在实际项目中,还可以根据需求进行个性化定制,比如添加过渡动画、...

    Android左右菜单滑动

    2. **滑动菜单库**:Android社区提供了许多现成的库来简化滑动菜单的实现,例如`SlidingPaneLayout`、`DrawerLayout`等。这些库提供了一种简便的方式来创建滑动面板,允许内容视图随着用户的滑动而隐藏或显示。 3. ...

    DrawerLayout左侧滑动菜单

    DrawerLayout是Android开发中一种常见的...以上就是使用Toolbar和PopupMenu实现DrawerLayout左侧滑动菜单的基本步骤。通过这种方式,你可以在不离开当前屏幕的情况下,为用户提供便捷的导航选项,提升应用的用户体验。

    Android实现3D推拉门式滑动菜单源码解析

    本文将深入解析如何在Android平台上实现这种3D效果的滑动菜单,以及如何优化源码以适应实际项目需求。 首先,3D推拉门式滑动菜单的核心在于通过Matrix和Camera类来实现视图的3D旋转效果。Matrix是Android图形库中...

    android 左右滑动菜单

    在Android开发中,实现左右滑动菜单是一种常见的交互设计,它可以提供类似iOS设备上"智慧无锡"的功能。这种设计能够使用户通过简单的手势操作在主界面与侧边菜单之间切换,提升应用程序的用户体验。以下是对如何在...

    Android滑动菜单 sidemenu

    实现滑动菜单的一个常见方法是结合使用NavigationView,这是Android Design Support Library的一部分。NavigationView能够轻松地创建符合Material Design规范的侧滑菜单。通过在布局文件中添加NavigationView,并与...

    Android-自定义滑动菜单(抽屉效果)

    在本篇文章中,我们将深入探讨如何在Android中实现自定义滑动菜单的抽屉效果。 首先,我们需要了解Android的`DrawerLayout`组件,它是实现滑动菜单的基础。`DrawerLayout`是一个可以包含一个或多个"抽屉"的布局,...

    android滑动菜单源码

    本资源“android滑动菜单源码”提供了实现这一功能的源代码,帮助开发者理解和创建自己的滑动菜单。 在Android中,滑动菜单通常使用`android.support.v4.widget.DrawerLayout`组件来实现。`DrawerLayout`是Android...

    android滑动菜单

    在Android平台上,实现滑动菜单主要有两种方式:使用Android Support Library中的`NavigationView`和自定义实现,如使用`SlidingPaneLayout`或第三方库`AndroidSlidingUpPanel`等。 1. **Android Support Library的...

    Android实现导航菜单左右滑动效果

    对于滑动菜单,我们可以使用`DrawerLayout`,这是Android SDK提供的一种特殊布局,专门用于实现侧滑菜单效果。`DrawerLayout`可以将一个或多个“抽屉”(通常是包含菜单项的列表)从屏幕边缘滑出。 要创建滑动菜单...

    android Drawlayout 左右侧滑动菜单

    下面将详细讨论`Drawlayout`的实现原理、相关组件以及如何在项目中实现左右侧滑动菜单。 首先,`SlidingDrawer`是Android SDK中提供的一个原生组件,但在API 21(Android 5.0 Lollipop)之后已被废弃。尽管如此,它...

    android左侧菜单滑动

    总之,抽屉式导航是Android应用中常见的一种设计模式,通过`DrawerLayout`组件和相应的Java代码,开发者可以轻松地创建出类似QQ和人人的左侧滑动菜单。这不仅可以提高应用的可用性,还能使用户界面更加整洁和一致。

    超炫android滑动菜单源码

    本资源提供的"超炫android滑动菜单源码"是一个专为Android平台设计的高效、美观的滑动菜单实现,其独特之处在于其视觉效果和交互体验。 首先,我们来深入了解滑动菜单的设计理念。滑动菜单通常隐藏在主界面的左侧或...

    Android版SlidingMenu滑动菜单

    总结,Android版SlidingMenu为开发者提供了简单易用的侧滑菜单实现方式,通过合理的配置和自定义,可以打造出符合应用风格和用户需求的滑动菜单。对于希望提升应用用户体验的开发者而言,熟练掌握SlidingMenu的使用...

Global site tag (gtag.js) - Google Analytics