Android之SlideMenu实例Demo

简介:

年末加班基本上一周都没什么时候回家写代码,回到家就想睡觉,周末难得有时间写个博客,上次写了一篇关于SlideMenu开源项目的导入问题,这次主要讲讲使用的问题,SlideMenu应用的广泛程度就不用说了,基本上是App的标配,关于SlideMenu的各种使用方法有很多,网上各种Demo也很多,想来想去还是按照自己本身的实战方式去写写吧,走过的坑希望大家基本上不会遇到,开始正题:

基础布局

写布局文件之前先看下最终的效果图,昨天红色就是滑动出现的区域,右边的图片由左边的事件触发:

activity_main.xml中的布局:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<FrameLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     xmlns:tools= "http://schemas.android.com/tools"
     android:id= "@+id/main_frame"
     android:layout_width= "match_parent"
     android:layout_height= "match_parent"
     android:paddingBottom= "@dimen/activity_vertical_margin"
     android:paddingLeft= "@dimen/activity_horizontal_margin"
     android:paddingRight= "@dimen/activity_horizontal_margin"
     android:paddingTop= "@dimen/activity_vertical_margin"
     tools:context= "com.example.slidemenu.MainActivity"  >
 
     <ListView
         android:id= "@+id/list_base"
         android:layout_width= "match_parent"
         android:layout_height= "match_parent"  >
     </ListView>
 
</FrameLayout>

 menu_frame.xml中主要是用于右边显示布局,单独写出来一个是为了方便以后的替换:

1
2
3
4
5
6
7
8
<?xml version= "1.0"  encoding= "utf-8" ?>
<FrameLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     android:layout_width= "match_parent"
     android:layout_height= "match_parent"
     android:id= "@+id/menu_frame" >
     
 
</FrameLayout>

  slide_menu.xml中主要用来显示SlideMenu中的数据,最后通过代码区

1
2
3
4
5
6
7
<?xml version= "1.0"  encoding= "utf-8" ?>
<ListView xmlns:android= "http://schemas.android.com/apk/res/android"
     android:id= "@+id/list_slide"
     android:layout_width= "match_parent"
     android:layout_height= "match_parent" >
 
</ListView>

  list_item中的布局文件,之后自定义的Adapter会用到:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version= "1.0"  encoding= "utf-8" ?>
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     android:layout_width= "match_parent"
     android:layout_height= "match_parent"
     android:orientation= "horizontal"  >
     
     <ImageView
         android:id= "@+id/list_image"
        android:layout_width= "wrap_content"
        android:layout_height= "wrap_content" />
    
 
</LinearLayout>

实例Demo

首先MainActivity导入开源项目包(如果导入有问题可以参考本人的上一篇文章)之后继承SlidingFragmentActivity;

自定义 实例化Slide_Menu.xml的类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public  class  MyMenuFragment  extends  Fragment  implements  OnItemClickListener {
 
     private  View view;
     private  String[] listArrStrings= new  String[]{ "鹰" , " 鹭" , "火烈鸟" };
     @Override
     public  void  onCreate(Bundle savedInstanceState) {
         // TODO Auto-generated method stub
         super .onCreate(savedInstanceState);
     }
 
     @Override
     public  View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         // TODO Auto-generated method stub
         view=LayoutInflater.from(getActivity()).inflate(R.layout.slide_menu,  null );
         return  view;
     }
 
     @Override
     public  void  onActivityCreated(Bundle savedInstanceState) {
         // TODO Auto-generated method stub
         super .onActivityCreated(savedInstanceState);
         ListView  listView=(ListView) view.findViewById(R.id.list_slide);
         listView.setAdapter( new  ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, listArrStrings));
         listView.setOnItemClickListener( this );
     }
 
     
     @Override
     public  void  onItemClick(AdapterView<?> parent, View view,  int  position,
             long  id) {
         // TODO Auto-generated method stub
 
         if (getActivity()  instanceof  MainActivity){
             ((MainActivity)getActivity()).changeImage(position);
         }
     }
 
}

  onCreate中方法中调用:

1
2
3
4
5
6
7
8
9
10
11
12
super .onCreate(savedInstanceState);
     setBehindContentView(R.layout.menu_frame);
     setContentView(R.layout.activity_main);
     slidingMenu = getSlidingMenu();
     slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
     slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
     slidingMenu.setBehindWidth( 80 );
     
  
     MyMenuFragment menuFragment =  new  MyMenuFragment();
     getSupportFragmentManager().beginTransaction()
             .replace(R.id.menu_frame, menuFragment,  "MyMenu" ).commit();

  MyMenuFragment中如果回调MainActivity调用的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public   void   changeImage( int  index){
     ListView view=(ListView) findViewById(R.id.list_base);
     switch  (index) {
     case  0 :
         view.setAdapter( new  MyListAdapter( this , R.drawable.eagle));
         break ;
     case  1 :
         view.setAdapter( new  MyListAdapter( this , R.drawable.heron));
         break ;
     case  2 :
         view.setAdapter( new  MyListAdapter( this , R.drawable.flamingo));
         break ;
     default :
         break ;
     }
}

  最后是自定义的MyListAdapter:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public  class  MyListAdapter  extends  BaseAdapter{
 
     private  int  resourceID;
     private  LayoutInflater inflater;
    public  MyListAdapter(Context context, int  resId){
        inflater=LayoutInflater.from(context);
        resourceID=resId;
    }
    @Override
    public  int  getCount() {
        // TODO Auto-generated method stub
        return  3 ;
    }
 
    @Override
    public  Object getItem( int  position) {
        // TODO Auto-generated method stub
        return  null ;
    }
 
    @Override
    public  long  getItemId( int  position) {
        // TODO Auto-generated method stub
        return  0 ;
    }
 
    @Override
    public  View getView( int  position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View view= null ;
        if  (convertView== null ) {
          view=inflater.inflate(R.layout.list_item, null );
        } else {
            view=convertView;
        }
        ImageView imageView=(ImageView) view.findViewById(R.id.list_image);
        imageView.setImageResource(resourceID);
        return  view;
    }
      
  }

本人只是设置左滑动,其实还是设置右滑动,设置左右滑动通过setSecondaryMenu设置;

 最后看下火烈鸟吧,老外还是比较爱护动物的,以上都是开源项目SlideMenu中的图片:

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4148837.html,如需转载请自行联系原作者

相关文章
|
API Android开发 计算机视觉
视觉智能平台有android人脸识别拍照demo?
视觉智能平台有android人脸识别拍照demo么?
104 0
|
6月前
|
Java 关系型数据库 数据库
Android App连接真机步骤与APP的开发语言和工程结构讲解以及运行实例(超详细必看)
Android App连接真机步骤与APP的开发语言和工程结构讲解以及运行实例(超详细必看)
96 0
|
编解码 Android开发 开发者
Android平台RTMP多实例推送的几种情况探讨
好多开发者提到,如何实现Android平台,多实例推送,多实例推送,有几种理解: 1. 多路编码,多个实例分别推送到不同的RTMP URL(如Android采集板卡同时接2路出去); 2. 同一路编码,多个实例分别推送到不同的RTMP URL(如推送到内网、外网不同的RTMP服务器); 3. 部分路编码、部分路对接编码后的H.264/AAC数据,多个实例分别推送到不同的RTMP URL(混合推)。
|
Java Android开发 开发者
1024程序节|Android框架之一 BRVAH【BaseRecyclerViewAdapterHelper】使用demo
BRVAH是一个强大的RecyclerAdapter框架(什么是RecyclerView?),它能节约开发者大量的开发时间,集成了大部分列表常用需求解决方案。为什么会有它?请查看「Android开源框架BRVAH由来篇」该框架于2016年4月10号发布的第1个版本到现在已经一年多了,经历了800多次代码提交,140多次版本打包,修复了1000多个问题,获得了9000多star,非常感谢大家的使用以及反馈。
245 0
|
3月前
|
XML API Android开发
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
本文介绍了如何使用androidx.preference库快速创建具有一级和二级菜单的Android设置界面的步骤和示例代码。
122 1
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
|
2月前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
6月前
|
Android开发
Android应用实例(一)之---有道辞典VZ.0
Android应用实例(一)之---有道辞典VZ.0
43 2
|
4月前
|
API Android开发
Android 监听Notification 被清除实例代码
Android 监听Notification 被清除实例代码
|
5月前
|
安全 Java Android开发
使用Unidbg进行安卓逆向实例讲解
使用Unidbg进行安卓逆向实例讲解
133 2
|
6月前
|
Android开发
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。 【5月更文挑战第2天】
310 0
下一篇
无影云桌面