Android slidingmenu详解 优化侧滑

Android slidingmenu 详解 性能优化

转载请注明:   http://blog.csdn.net/aaawqqq

简介

SlidingMenu 是github 上Android开源项目  能用于快速集成
Android 侧滑菜单效果

Slidingmenu 里面可以包含多种组件 fragment  viewpager  listview  等

下载地址:

github    : https://github.com/jfeinstein10/SlidingMenu

actionbarsherlock  :   https://github.com/JakeWharton/ActionBarSherlock

(一) 效果图

 
          

左滑  和   右滑   滑动出 类似menu的view

(二) 导入项目

将actionbarsherlock 和 slidingmenu 导入项目里

工程名为:

ExampleListActivity

actionbarsherlock

library

项目的结构层次

ExampleListActvity

|

|----------Library

|

|-------------actionbarsherlock

(三) 导包项目 与 排错

(1)导入项目后  打开 ExampleListActivity  的 properties  选择 Android 这一项

之后可以看见缺少 /ABS  这个库   不用在意 删掉就好了   如下图    (图:1)

(2)打开library 的  properties  选择 Android 这一项

之后在library一项添加actionbar   (如图2)

(3)完成上述步骤之后会报一个错误   表示2个不同版本的  android-support-v4.jar
 冲突了

解决办法:    删除library中的  android-support-v4.jar
  或者  使用相同的 android-support-v4.jar

错误如下:

	  Found 2 versions of android-support-v4.jar in the dependency list,
	  but not all the versions are identical (check is based on SHA-1 only at this time).
	  All versions of the libraries must be the same at this time.
	  Versions found are:
	  Path: /Users/baozi/Documents/Dev/HuihuaWorkspace/actionbarsherlock/libs/android-support-v4.jar
	  	Length: 271754
	  	SHA-1: 53307dc2bd2b69fd5533458ee11885f55807de4b
	  Path: /Users/baozi/Documents/Dev/HuihuaWorkspace/library/libs/android-support-v4.jar
	  	Length: 758727
	  	SHA-1: efec67655f6db90757faa37201efcee2a9ec3507
	  Jar mismatch! Fix your dependencies

(4)完成上述步骤之后     library 当中还存在错误:

找不到     getSupportActionBar().setDisplayHomeAsUpEnabled(true);

解决办法:

找到Library中的src下找到SlidingFragmentActivity.java,修改父类

将:

public class SlidingFragmentActivity extends FragmentActivity 

修改为:

public class SlidingFragmentActivity extends SherlockFragmentActivity

项目的结构层次

ExampleListActvity

|

|----------Library

|

|----------------actionbarsherlock

clean顺序  actionbarsherlock    、  library、 ExampleListActivity

逐个clean 项目就能运行了

(图:1)

图2:

(四) 设置详解

Simple Example :

public class SlidingExample extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle(R.string.attach);
        // set the content view
        setContentView(R.layout.content);
        // configure the SlidingMenu
        SlidingMenu menu = new SlidingMenu(this);
        menu.setMode(SlidingMenu.LEFT);
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        menu.setShadowWidthRes(R.dimen.shadow_width);
        menu.setShadowDrawable(R.drawable.shadow);
        menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        menu.setFadeDegree(0.35f);
        menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
        menu.setMenu(R.layout.menu);
    }

}

Slidingmenu 提供属性修改

1 初始化Slidingmenu:

SlidingMenu menu = getSlidingMenu();

2 setMode //设置滑动模式

设置是左滑还是右滑,还是左右都可以滑

menu.setMode(SlidingMenu.LEFT);//设置左滑菜单

menu.setMode(SlidingMenu.LEFT_RIGHT);//设置左右都可滑动

menu.setMode(SlidingMenu.TOUCHMODE_NONE);//不能手势滑动

3 设置SlidingMenu阴影

menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度

menu.setSecondaryShadowDrawable(R.drawable.shadowright);//设置右侧菜单阴影的图片资源

menu.setShadowDrawable(R.drawable.shadow);//设置左侧菜单阴影图片

4 设置SlidingMenu边框距离

menu.setBehindOffsetRes();//SlidingMenu滑出时距离边框的剩余宽度

menu.setBehindOffset(getWindowManager().getDefaultDisplay().getWidth() /
5);

// getWindowManager().getDefaultDisplay().getWidth() / 5    表示 距离屏幕宽度 1/5

5 设置SlidingMenu渐变

menu.setFadeEnabled(true);/是否有渐变

menu.setFadeDegree(0.35f);//设置渐变比率

6
设置SlidingMenu布局

		sm = getSlidingMenu();
		setBehindContentView(R.layout.main_menu_frame);
		sm.setSecondaryMenu(R.layout.main_menu_frame_two);
		messageFragment = new MessageFragment();
		profileFragment = new ProfileFragment();
				getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame, messageFragment).commit();
				getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame_two, profileFragment).commit();

设置布局有3个方法  :

setContentView(R.layout.main);  //设置slidingmenu中间的布局

setBehindContentView(R.layout.main_menu_frame);//设置左侧的布局

sm.setSecondaryMenu(R.layout.main_menu_frame_two);//设置右侧的布局

使用的是左右两侧 我一般设置为 fragment

getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame,messageFragment).commit();

表示为替换 fragment

7
设置SlidingMenu滑动的拖拽效果

slidingMenu.setBehindScrollScale(0);

8
设置SlidingMenu判断打开状态
并 自动关闭或开启

menu.toggle();

如果SlidingMenu 它是open的,它会被关闭,反之亦然。

9
设置SlidingMenu触碰屏幕的范围

menu.setTouchModeBehind(SlidingMenu.TOUCHMODE_FULLSCREEN);

menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

设置菜单滑动,触碰屏幕的范围setTouchModeAbove

10 设置SlidingMenu关闭器监听

监听主要分2种   open  和  close

open:

menu.setOnOpenedListener(onOpenListener);//监听slidingmenu打开之后调用

menu.setOnOpenListener(onOpenListener);//监听slidingmenu打开时调用

close:

两个监听器  注意看了   一个是  closed  一个是 close

menu.setOnClosedListener(listener);

menu.setOnCloseListener(listener);

这两个的区别就是

menu.OnCloseListener(OnClosedListener);//监听Slidingmenu关闭时事件

menu.OnClosedListener(OnClosedListener);//监听Slidingmenu关闭后事件

11 设置SlidingMenu是否淡入/淡出

menu.setFadeEnabled(true);

12
其它

menu.showMenu();//显示SlidingMenu

menu.showContent();//显示内容

menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上

menu.setMenu(R.layout.menu);//设置menu的布局文件

等等

(五) 性能优化

SlidingMenu性能方面 在使用fragment 的时候数据加载过多或者view复杂  就会很卡顿

Android 4.0 之后  使用了硬件加速优化view

在Androidmanifest.xml 里面  设置    targetSdkVersion  大于等于17 就能开启硬件加速  提升性能

    <uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="17" />

硬件加速相关参考文章 :  http://zuiniuwang.blog.51cto.com/3709988/721798

Slidingmenu 的Bug 解决资料:

SlidingMenu中setTouchModeBehind方法不起作用:   https://github.com/jfeinstein10/SlidingMenu/issues/446

希望大家能补充一些

谢谢

神兽镇楼

//┏┓   ┏┓
//┏┛┻━━━┛┻┓
//┃       ┃  
//┃   ━   ┃
//┃ ┳┛ ┗┳ ┃
//┃       ┃
//┃   ┻   ┃
//┃       ┃
//┗━┓   ┏━┛
//  ┃   ┃   神兽保佑        
//  ┃   ┃   代码无BUG!
//  ┃   ┗━━━┓
//  ┃       ┣┓
//  ┃       ┏┛
//  ┗┓┓┏━┳┓┏┛
//    ┃┫┫ ┃┫┫
//    ┗┻┛ ┗┻┛

每日比昨天要多前进一点点

时间: 2024-10-20 00:39:13

Android slidingmenu详解 优化侧滑的相关文章

android WebView详解,常见漏洞详解和安全源码

这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 由于博客内容长度,这次将分为上下两篇,上篇详解 WebView 的使用,下篇讲述 WebView 的漏洞和坑,以及修复源码的解析. 下篇:android WebView详解,常见漏洞详解和安全源码(下) 转载请注明出处:http://blog.csdn.net/self_study/article/details/54928371. 对技术感兴趣的同鞋加群 54

Android 签名详解

在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个 permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应 用程序才能取得该权限.Android使用Java的数字证书相关的机制来 给apk加盖数字证书,要理解android的数字证书,需要先了解以下数字证书的概念和java的数字证书机制.Android系统要求每一个

android ListView详解

转自:http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三个元素: 1.ListVeiw 用来展示列表的View. 2.适配器 用来把数据映射到ListView上的中介. 3.数据    具体的将被映射的字符串,图片,或者基本组件

[gitbook] Android框架分析系列之Android Binder详解

请支持作者原创: https://mr-cao.gitbooks.io/android/content/android-binder.html Android Binder详解 Table of Contents 1. binder简介 2. binder的实现 2.1. IBinder类简介 2.2. IInterface类简介 2.3. BpBinder和BBinder简介 2.4. ProcessState和IPCThreadState简介 2.5. ServiceManager简介 2.

android动画详解三 动画API概述

· 属性动画与view动画的不同之处 view动画系统提供了仅动画View 对象的能力,所以如果你想动画非View 对象,你就要自己实现代码. view动画系统实际上还被强制仅能对 View 的少数属性进行动画,比如缩放和旋转,而不能对背景色进行. view动画的另一个坏处是它仅修改View的绘制位置,而不是View的实际位置.例如,如果你动画一个移动穿越屏幕,button的绘制位置是正确的,但实际你可以点击它的位置却没有变,所以你必须去实现你自己的逻辑来处理它. 使用属性动画系统时,这个限制被

android矩阵详解

Matrix,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 在Android里面,Matrix由9个float值构成,是一个3*3的矩阵.最好记住.如下图: 解释一下,上面的sinX和cosX,表示旋转角度的cos值和sin值,注意,旋转角度是按顺时针方向计算的. translateX和translateY表示x和y的平移量.scale是缩放的比例,1是不变,2是表示缩放1/2,这样子. 在android.graphics.Matrix中有对应旋转的函

Android ProgressBar详解以及自定义

版本:1.0 日期:2014.5.16 版权:© 2014 kince 转载注明出处 这一次主要说一下Android下的进度条,为什么是它呢,因为近期被其各种美轮美奂的设计所倾倒,计划逐渐去实现.另外一个因素也是它也是为数不多的直接继承于View类的控件,从中可以学习到一些自定义控件的知识.下面列举了一些个人觉得还算漂亮的进度条,仅供参考. 是不是很漂亮,其实就像上面图形展示的那样,进度条大体上无非就是这几种形式.这样一来肯定是需要自定义了,所以方向有两个:要么继承于系统的ProgressBar

Android 菜单详解

Android中菜单分为三种,选项菜单(OptionMenu),上下文菜单(ContextMenu),子菜单(SubMenu) 选项菜单 可以通过两种办法增加选项菜单,一是在menu.xml中添加,该种方式参见Android 资源详解(二) 菜单资源,二是在.java中添加 1.覆盖Activity 的 onCreateOptionsMenu(Menu  menu)方法,当我们第一次打开菜单 时该方法被自动调用. 2.调用Menu的 add()方法添加菜单项(Menultem) ,可以调用Men

Android菜单详解(一)——理解android中的Menu

前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至今为止看到的最好的一本android书,中文版出到<精通Android 2>. 理解Android的菜单 菜单是许多应用程序不可或缺的一部分,Android中更是如此,所有搭载Android系统的手机甚至都要有一个"Menu"键,由此可见菜单在Android程序中的特殊性.An