zoukankan      html  css  js  c++  java
  • 安卓高级4 第三方库SlidingMenu的使用

    源码位于github上(本人fork地址):点击进入地址
    效果图:这里写图片描述

    1. 使用方法:下载源码后 解压其中的文件夹library 到任意地方
    2. 修改library中gragle 其方法参考另一个博客(建议先修改后倒入studio)此参考链接中是先导入我个人不推荐可能出什么问题
      具体参考
    3. 将linbrary导入到studio
    4. 新建项目添加依赖
      这里写图片描述

    参考手册:
    SlidingMenu 常用属性介绍:
    menu.setMode(SlidingMenu.LEFT);//设置左滑菜单
    menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的屏幕范围,该设置为全屏区域都可以滑动
    menu.setShadowDrawable(R.drawable.shadow);//设置阴影图片
    menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
    menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
    menu.setBehindWidth(400);//设置SlidingMenu菜单的宽度
    menu.setFadeDegree(0.35f);//SlidingMenu滑动时的渐变程度
    menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上
    menu.setMenu(R.layout.menu_layout);//设置menu的布局文件
    menu.toggle();//动态判断自动关闭或开启SlidingMenu
    menu.showMenu();//显示SlidingMenu
    menu.showContent();//显示内容
    menu.setOnOpenListener(onOpenListener);//监听slidingmenu打开
    关于关闭menu有两个监听,简单的来说,对于menu close事件,一个是when,一个是after
    menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭时事件
    menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭后事件

    左右都可以划出SlidingMenu菜单只需要设置
    menu.setMode(SlidingMenu.LEFT_RIGHT);属性,然后设置右侧菜单的布局文件
    menu.setSecondaryShadowDrawable(R.drawable.shadowright);//右侧菜单的阴影图片

    设置SlidingMenu属性
    sm = getSlidingMenu();
    //如果只显示左侧菜单就是用LEFT,右侧就RIGHT,左右都支持就LEFT_RIGHT
    sm.setMode(SlidingMenu.LEFT_RIGHT);//设置菜单滑动模式,菜单是出现在左侧还是右侧,还是左右两侧都有
    sm.setShadowDrawable(R.drawable.shadow);//设置阴影的图片资源
    sm.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
    //sm.setBehindWidth(200);//设置菜单的宽
    sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
    sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的区域

    支持右侧划出菜单:
    //SlidingMenu可以同时支持划出左右两侧的菜单,互不冲突,而且动画优美,体验良好。
    sm.setSecondaryMenu(R.layout.menu_frame2);//设置右侧菜单
    sm.setSecondaryShadowDrawable(R.drawable.shadowright);//设置右侧菜单阴影的图片资源
    //右侧SlidingMenu的Fragment
    getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame2, new SampleListFragment()).commit();

    slidingMenu = getSlidingMenu();
    //设置是左滑还是右滑,还是左右都可以滑
    slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
    //设置阴影宽度
    slidingMenu.setShadowWidth(getWindowManager().getDefaultDisplay().getWidth() / 40);
    //设置左菜单阴影图片
    slidingMenu.setShadowDrawable(R.drawable.shadow);
    //设置右菜单阴影图片
    slidingMenu.setSecondaryShadowDrawable(R.drawable.right_shadow);
    //设置菜单占屏幕的比例
    slidingMenu.setBehindOffset(getWindowManager().getDefaultDisplay().getWidth() / 5);
    //设置滑动时菜单的是否淡入淡出
    slidingMenu.setFadeEnabled(true);
    //设置淡入淡出的比例
    slidingMenu.setFadeDegree(0.4f);
    //设置滑动时拖拽效果
    slidingMenu.setBehindScrollScale(0);
    //设置要使菜单滑动,触碰屏幕的范围
    slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);


    案例

     文件结构:
    

    1. 列表内容

    MainActivity :

    package com.example.myapp2;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    
    import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
    
    import static com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.SLIDING_CONTENT;
    import static com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.TOUCHMODE_FULLSCREEN;
    
    public class MainActivity extends AppCompatActivity {
    
        private SlidingMenu slidingMenu;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //创建一个滑动类
            slidingMenu = new SlidingMenu(this);
            //设置侧滑测单是在左手还是右边 或者两个都有
            //SlidingMenu.LEFT_RIGHT 两个都有
            //SlidingMenu.LEFT 左边有侧滑栏
            //SlidingMenu.RIGHT 右边有侧滑栏
            slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
    
            //设置触摸模式
            //TOUCHMODE_FULLSCREEN 整个屏幕都可以拉动打开侧滑栏
            //TOUCHMODE_MARGIN 只有最左边向右拉 或者最右边像左拉才有效果
            //TOUCHMODE_NONE 关闭侧滑
            slidingMenu.setTouchModeAbove(TOUCHMODE_FULLSCREEN);
    
            //设置两个侧滑栏需要隐藏的宽度(换个说法就是其原本宽度-300),只用户左右滑动abs(300)时侧滑栏完全显示
            //也可以说侧滑栏完全显示和内容交界线到另一端的距离
            slidingMenu.setBehindOffset(300);
    
            //设置左边的侧滑栏内容布局
            slidingMenu.setMenu(R.layout.left_layout);
            //设置右边侧滑栏内容
            slidingMenu.setSecondaryMenu(R.layout.left_layout);
    
            //是否开启拉出侧滑栏时淡出效果 初始化值为0.6f直到1完全显示 左右两边同时生效
            slidingMenu.setFadeEnabled(true);
            slidingMenu.setFadeDegree(0.6f);
    
    
    
            //设置有左边分割线图像和大小
            slidingMenu.setShadowDrawable(R.mipmap.ic_launcher);
           //设置右边分割线图像
            slidingMenu.setSecondaryShadowDrawable(R.mipmap.ic_launcher);
    
            //设置分割线的大小两边生效
            slidingMenu.setShadowWidth(20);
            //当侧滑栏完全关闭的时候调用 两边都有效果
            slidingMenu.setOnClosedListener(new SlidingMenu.OnClosedListener() {
                @Override
                public void onClosed() {
    
                }
            });
            //当侧滑栏关闭的时候调用 两边都有效果
            slidingMenu.setOnCloseListener(new SlidingMenu.OnCloseListener() {
                @Override
                public void onClose() {
    
                }
            });
            //当侧滑栏完全开启的时候调用 两边都有效果
            slidingMenu.setOnOpenedListener(new SlidingMenu.OnOpenedListener() {
                @Override
                public void onOpened() {
    
                }
            });
            /**
             * 此处有坑 注意:右手边的不调用此方法
             */
            //当侧滑栏完全开启的时候调用 只有左手边调用
            slidingMenu.setOnOpenListener(new SlidingMenu.OnOpenListener() {
                @Override
                public void onOpen() {
    
                }
            });
    
            slidingMenu.attachToActivity(this, SLIDING_CONTENT);
        }
    
        public void onclicLeft(View view) {
    
            Button btn = (Button) view;
            //左手侧滑栏是打开的
            if (slidingMenu.isMenuShowing()) {
                slidingMenu.showContent();
                btn.setText("开启左边");
            } else {
                slidingMenu.showMenu();
                btn.setText("关闭");
            }
        }
    
        public void onclicRight(View view) {
            Button btn = (Button) view;
            //右手侧滑栏是打开的
            if (slidingMenu.isSecondaryMenuShowing()) {
                slidingMenu.showContent();
                btn.setText("开启右边");
            } else {
                slidingMenu.showSecondaryMenu();
                btn.setText("关闭");
            }
        }
    }

    left_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:background="#f0f"
        android:layout_height="match_parent">
    
    </LinearLayout>
    

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.myapp2.MainActivity">
    
        <Button
            android:onClick="onclicLeft"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="开启左边" />
        <Button
            android:onClick="onclicRight"
            android:layout_alignParentRight="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="开启" />
    </RelativeLayout>
    

    案例2Activity直接继承

    这里写图片描述

    LeftFragment

    package qianfeng.com.slidingfragmentdemo;
    
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    
    public class LeftFragment extends Fragment {
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            return inflater.inflate(R.layout.fragment_left, container, false);
        }
    
    }
    

    MainActivity

    package qianfeng.com.slidingfragmentdemo;
    
    import android.os.Bundle;
    
    import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
    import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
    
    /**
     * 继承与 SlidingFragmentActivity
     * setBehindContentView()  将该方法设置的布局  中的ViewGroup 作为一个容器
     * 用来承载  Fragment
     *
     * 实例化SlidingMenu 的时候   是通过get方式获取
     *
     * 最后 将  Fragment 添加到容器中
     */
    public class MainActivity extends SlidingFragmentActivity {
    
        private SlidingMenu slidingMenu;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            setBehindContentView(R.layout.left_menu_layout);
    
            // 继承 SlidingFragmentMenu 方法之后 可以直接使用Get方法 获取  slidingMenu对象
            slidingMenu = getSlidingMenu();
            slidingMenu.setMode(SlidingMenu.RIGHT);
    //        slidingMenu.setSecondaryMenu(R.layout.layout);
            slidingMenu.setBehindOffset(300);
            slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    
            getSupportFragmentManager().beginTransaction().add(R.id.container, new LeftFragment()).commit();
    
        }
    }
    

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        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="qianfeng.com.slidingfragmentdemo.MainActivity">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!" />
    </RelativeLayout>
    

    fragment_left.xml

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorAccent"
        tools:context="qianfeng.com.slidingfragmentdemo.LeftFragment">
    
        <!-- TODO: Update blank fragment layout -->
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="@string/hello_blank_fragment" />
    
    </FrameLayout>
    

    layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:background="#f0f"
        android:layout_height="match_parent">
    
    </LinearLayout>
    

    left_menu_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
    </LinearLayout>
  • 相关阅读:
    水平垂直居中的四种方法
    对js数组方法的部分了解以及面试内容
    第三阶段——jS——webApi编程——BOM
    对于VUE中slot的理解与学习
    第三阶段——jS——webApi编程——DOM
    初学node,关于使用req.body,打印的值为空解决方法
    第三阶段:javaScript 网页编程基本内容
    第三阶段——jS——webApi编程——移动端事件+JQuery+js面向对象
    2005129考勤登记
    200525考勤登记
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152141.html
Copyright © 2011-2022 走看看