漂亮的侧滑主页(仿QQ、腾讯QQ首页侧滑效果)

来源:互联网 发布:javascrip 和js 编辑:程序博客网 时间:2024/05/10 23:58

项目原地址:  https://github.com/SpecialCyCi/AndroidResideMenu


GitHub文档说明:


DEMO

This copy is the demo.

Version Migration

Upgrading tov1.4 fromv1.3,v1.2, v1.1, v1.0

Duplicate the followed code in dispatchTouchEvent() of Activity, replace the olddispatchTouchEvent() code.

    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        return resideMenu.dispatchTouchEvent(ev);    }

Requirements

Run in Android 2.3 +

Installation

  1. import ResideMenu project to your workspace.
  2. make it as a dependency library project to your main project.
    ( see example )

or

If you want to merge ResideMenu with your project, you should follow these steps.

  1. Copy all files from src/com/special/ResideMenu to your project.
  2. Copy libs/nineoldandroids-library-2.4.0.jar to your project’s corresponding path: libs/
  3. Copy res/drawable-hdpi/shadow.9.png to your project’s corresponding path: res/drawable-hdpi/
  4. Copy res/layout/residemenu.xml and residemenu_item.xml to your project’s corresponding path: res/layout

Usage

init ResideMenu: write these code in Activity onCreate()

        // attach to current activity;        resideMenu = new ResideMenu(this);        resideMenu.setBackground(R.drawable.menu_background);        resideMenu.attachToActivity(this);        // create menu items;        String titles[] = { "Home", "Profile", "Calendar", "Settings" };        int icon[] = { R.drawable.icon_home, R.drawable.icon_profile, R.drawable.icon_calendar, R.drawable.icon_settings };        for (int i = 0; i < titles.length; i++){            ResideMenuItem item = new ResideMenuItem(this, icon[i], titles[i]);            item.setOnClickListener(this);            resideMenu.addMenuItem(item,  ResideMenu.DIRECTION_LEFT); // or  ResideMenu.DIRECTION_RIGHT        }


If you want to use slipping gesture to operate(lock/unlock) the menu, override this code in Acitivity dispatchTouchEvent() (please duplicate the followed code in dispatchTouchEvent() of Activity.

    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        return resideMenu.dispatchTouchEvent(ev);    }


On some occasions, the slipping gesture function for locking/unlocking menu, may have conflicts with your widgets, such as viewpager. By then you can add the viewpager to ignored view, please refer to next chapter – Ignored Views.

open/close menu

resideMenu.openMenu(ResideMenu.DIRECTION_LEFT); // or ResideMenu.DIRECTION_RIGHTresideMenu.closeMenu();


listen in the menu state

    resideMenu.setMenuListener(menuListener);    private ResideMenu.OnMenuListener menuListener = new ResideMenu.OnMenuListener() {        @Override        public void openMenu() {            Toast.makeText(mContext, "Menu is opened!", Toast.LENGTH_SHORT).show();        }        @Override        public void closeMenu() {            Toast.makeText(mContext, "Menu is closed!", Toast.LENGTH_SHORT).show();        }    };


disable a swipe direction

  resideMenu.setSwipeDirectionDisable(ResideMenu.DIRECTION_RIGHT);


Ignored Views

On some occasions, the slipping gesture function for locking/unlocking menu, may have conflicts with your widgets such as viewpager.By then you can add the viewpager to ignored view.

        // add gesture operation's ignored views        FrameLayout ignored_view = (FrameLayout) findViewById(R.id.ignored_view);        resideMenu.addIgnoredView(ignored_view);

So that in ignored view’s workplace, the slipping gesture will not be allowed to operate menu.




 引用简述:

  1. 引用ResideMenu依赖

  2. 在Activity中初始化ResideMenu(左侧菜单选择条目、右侧菜单选择条目)

  3. 设置ResideMenu的打开和关闭监听


代码示例:

public class MenuActivity extends FragmentActivity implements View.OnClickListener{    private ResideMenu resideMenu;       //初始化resideMenu    private MenuActivity mContext;        private ResideMenuItem itemHome;       //初始化菜单选择选项    private ResideMenuItem itemProfile;    private ResideMenuItem itemCalendar;    private ResideMenuItem itemSettings;    /**     * Called when the activity is first created.     * 当这个activity第一次被创建的时候调用     */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        mContext = this;                setUpMenu();        changeFragment(new HomeFragment());    }    /**     * 初始化Menu     */    private void setUpMenu() {        // attach to current activity;        resideMenu = new ResideMenu(this);        resideMenu.setBackground(R.drawable.menu_background);        resideMenu.attachToActivity(this);        resideMenu.setMenuListener(menuListener);        //valid scale factor is between 0.0f and 1.0f. leftmenu'width is 150dip.         resideMenu.setScaleValue(0.6f);   //这个API是设置两侧菜单宽度   0.1f~0.4f HomeFragment划出不显示,手势可以滑回                                          //0.5~1.0  值越大两侧菜单显示越小                                        // create menu items;        itemHome     = new ResideMenuItem(this, R.drawable.icon_home,     "Home");        itemProfile  = new ResideMenuItem(this, R.drawable.icon_profile,  "Profile");        itemCalendar = new ResideMenuItem(this, R.drawable.icon_calendar, "Calendar");        itemSettings = new ResideMenuItem(this, R.drawable.icon_settings, "Settings");        itemHome.setOnClickListener(this);        itemProfile.setOnClickListener(this);        itemCalendar.setOnClickListener(this);        itemSettings.setOnClickListener(this);        /*设置左侧和右侧选择菜单*/        resideMenu.addMenuItem(itemHome, ResideMenu.DIRECTION_LEFT);        resideMenu.addMenuItem(itemProfile, ResideMenu.DIRECTION_LEFT);        resideMenu.addMenuItem(itemCalendar, ResideMenu.DIRECTION_RIGHT);        resideMenu.addMenuItem(itemSettings, ResideMenu.DIRECTION_RIGHT);        // You can disable a direction by setting ->        // resideMenu.setSwipeDirectionDisable(ResideMenu.DIRECTION_RIGHT);                       //顶部左上部按钮,点击打开左侧菜单        findViewById(R.id.title_bar_left_menu).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                resideMenu.openMenu(ResideMenu.DIRECTION_LEFT);            }        });                //顶部右上部按钮,点击打开右侧隐藏菜单        findViewById(R.id.title_bar_right_menu).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                resideMenu.openMenu(ResideMenu.DIRECTION_RIGHT);            }        });    }            @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        return resideMenu.dispatchTouchEvent(ev);    }            @Override    public void onClick(View view) {                   //跳转到指定的Fragment        if (view == itemHome){            changeFragment(new HomeFragment());                    }else if (view == itemProfile){            changeFragment(new ProfileFragment());        }else if (view == itemCalendar){            changeFragment(new CalendarFragment());        }else if (view == itemSettings){            changeFragment(new SettingsFragment());        }        resideMenu.closeMenu();    }        /*     * ResideMenu打开和关闭事件的监听     */    private ResideMenu.OnMenuListener menuListener = new ResideMenu.OnMenuListener() {        @Override        public void openMenu() {            Toast.makeText(mContext, "Menu is opened!", Toast.LENGTH_SHORT).show();        }        @Override        public void closeMenu() {            Toast.makeText(mContext, "Menu is closed!", Toast.LENGTH_SHORT).show();        }    };        /**     * Fragment跳转的方法     * @param targetFragment   需要跳转的Fragment       */    private void changeFragment(Fragment targetFragment){        resideMenu.clearIgnoredViewList();        getSupportFragmentManager()                .beginTransaction()                .replace(R.id.main_fragment, targetFragment, "fragment")                .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE)                .commit();    }        // What good method is to access resideMenu?    public ResideMenu getResideMenu(){        return resideMenu;    }}


源码下载地址: http://download.csdn.net/detail/u010333409/7851261













0 0
原创粉丝点击