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

(一) 效果图



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWFhd3FxcQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="300" height="480" > 
          

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

(二) 导入项目

将actionbarsherlock 和 slidingmenu 导入项目里

project名为:

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-12-15 08:01:57

Android slidingmenu详细解释 滑动的优化的相关文章

Android slidingmenu详解 优化侧滑

Android slidingmenu 详解 性能优化 转载请注明:   http://blog.csdn.net/aaawqqq 简介 SlidingMenu 是github 上Android开源项目  能用于快速集成 Android 侧滑菜单效果 Slidingmenu 里面可以包含多种组件 fragment  viewpager  listview  等 下载地址: github    : https://github.com/jfeinstein10/SlidingMenu action

Android中多线程编程(四)AsyncTask类的详细解释(附源码)

Android中多线程编程中AsyncTask类的详细解释 1.Android单线程模型 2.耗时操作放在非主线程中执行 Android主线程和子线程之间的通信封装类:AsyncTask类 1.子线程中更新UI 2.封装.简化异步操作. 3.AsyncTask机制:底层是通过线程池来工作的,当一个线程没有执行完毕,后边的线程是无法执行的.必须等前边的线程执行完毕后,后边的线程才能执行. AsyncTask类使用注意事项: 1.在UI线程中创建AsyncTask的实例 2.必须在UI线程中调用As

Android中时间戳的详细解释

Android中时间戳的详细解释: (1).定义: 时间戳就是根据当前系统时间生成的一组随机数字. (2).作用: 作为对数据唯一性的一种判断依据.避免了重复修改数据所带来的错误! (3).应用: (1).在银行account表中建立时间戳字段timestamp,设定为文本类型varchar. (2).当银行A读取account表中的存款字段时,同时也读取时间戳字段,比如123456. (3).当银行A修改完存款数值后,进行存盘操作时,将先前读取的时间戳123456与当时表中的时间戳进行一次对比

Android客户端请求服务器端的详细解释

Android客户端请求服务器端的详细解释 1. Android客户端与服务器端通信方式: Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式. 2. 解析服务器端返回数据的解释: (1).对于服务器端来说,返回给客户端的数据格式一般分为html.xml和json这三种格式. (2). JSON(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比

Android开发中的设计模式—单例模式的详细解释

Android开发中的设计模式-单例模式的详细解释: 1. 单例模式的特点: (1).保证一个类只有一个实例 (2).提供一个能访问到他的全局访问点. (3).构造函数声明为私有的,从而阻止了在类外创建对象 2. 种类: (1).饿汉式单例模式 (2).懒汉式单例模式 3. 代码分析: (1).饿汉式单例模式: //类加载的时候对象就实例化了. private static Single mSingle = new Single(); public static Single getInstan

Android中ViewHolder模式开发的详细解释

Android开发中ViewHolder模式开发的详细解释: 1.ViewHolder的解释: (1).只是一个静态类,不是Android的API方法. (2).它的作用就在于减少不必要的调用findViewById,然后把对底下的控件引用存在ViewHolder里面,再在View.setTag(holder)把它放在view里,下次就可以直接取了. 2.convertView中的TAG: (1).Tag不像ID是用标示view的.Tag从本质上来讲是就是相关联的view的额外的信息.它们经常用

Android中Service的详细解释与使用

Android中Service的详细解释与使用: 概念: (1).Service可以说是一个在后台运行的Activity.它不是一个单独的进程,它只需要应用告诉它要在后台做什么就可以了. (2).它要是实现和用户的交互的话需要通过通知栏或者是通过发送广播,UI去接收显示. (3).它的应用十分广泛,尤其是在框架层,应用更多的是对系统服务的调用. 作用: (1).它用于处理一些不干扰用户使用的后台操作.如下载,网络获取.播放音乐,他可以通过INTENT来开启,同时也可以绑定到宿主对象(调用者例如A

Android中WebView的详细解释

Android中WebView的详细解释: 1. 概念: WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页. 2. 使用方法: (1).实例化WebView组件: A.在Activity中实例化WebView组件.eg: WebView webView = new WebView(this); B.调用WebView的loadUrl()方法,设置WevView要显示的网页.eg: 互联网用:webView.loadUrl("http://

对Android开发者有益的40条优化建议

下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激励你,因为你在保持不断迭代,不经意中你学到了很多.然而,当你发布应用时你还要做一些更深入的事情. 从一些可正常工作的代码到一个可怕的应用程序是一个巨大的跳跃,相比iOS平台Android更是如此 .当在iOS上发布应用时只是在一个设备上跳跃–你的手机–对很多设备而言都很相似–同样大小的屏幕,都有很好