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

2024-05-11 22:18

本文主要是介绍漂亮的侧滑主页(仿QQ、腾讯QQ首页侧滑效果),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目原地址:  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.

    @Overridepublic 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.

    @Overridepublic 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_RIGHT
resideMenu.closeMenu();


listen in the menu state

    resideMenu.setMenuListener(menuListener);private ResideMenu.OnMenuListener menuListener = new ResideMenu.OnMenuListener() {@Overridepublic void openMenu() {Toast.makeText(mContext, "Menu is opened!", Toast.LENGTH_SHORT).show();}@Overridepublic 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 viewsFrameLayout 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;       //初始化resideMenuprivate MenuActivity mContext;private ResideMenuItem itemHome;       //初始化菜单选择选项private ResideMenuItem itemProfile;private ResideMenuItem itemCalendar;private ResideMenuItem itemSettings;/*** Called when the activity is first created.* 当这个activity第一次被创建的时候调用*/@Overridepublic 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() {@Overridepublic void onClick(View view) {resideMenu.openMenu(ResideMenu.DIRECTION_LEFT);}});//顶部右上部按钮,点击打开右侧隐藏菜单findViewById(R.id.title_bar_right_menu).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {resideMenu.openMenu(ResideMenu.DIRECTION_RIGHT);}});}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {return resideMenu.dispatchTouchEvent(ev);}@Overridepublic void onClick(View view) {                   //跳转到指定的Fragmentif (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() {@Overridepublic void openMenu() {Toast.makeText(mContext, "Menu is opened!", Toast.LENGTH_SHORT).show();}@Overridepublic 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













这篇关于漂亮的侧滑主页(仿QQ、腾讯QQ首页侧滑效果)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/980802

相关文章

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人

腾讯社招面试经历

前提:本人2011年毕业于一个普通本科,工作不到2年。   15号晚上7点多,正在炒菜做饭,腾讯忽然打电话来问我对他们的Linux C++的职位是否感兴趣,我表达了我感兴趣之后,就开始了一段简短的电话面试,电话面试主要内容:C++和TCP socket通信的一些基础知识。之后就问我一道算法题:10亿个整数,随机生成,可重复,求最大的前1万个。当时我一下子就蒙了,没反应过来,何况我还正在烧

完整的腾讯面试经过

从9月10号开始到现在快两个月了,两个多月中,我经历数次面试和笔试,在经历这些的同时积累了不少的经验,也学到了不少东西,在此把它记录下来,算是和一起找工作中的同学一起共勉吧。我是本校的学生,专业是机械制造及其自动化,找工作的主要目标是计算机软件类和机械制造方向的国内的企业,所以意向去外企的同学就不必浪费时间看这些面经啦,想去国内IT企业的同学可以继续看下去。本贴中我把最近的腾讯面试经过写下

【Godot4.3】多边形的斜线填充效果基础实现

概述 图案(Pattern)填充是一个非常常见的效果。其中又以斜线填充最为简单。本篇就探讨在Godot4.3中如何使用Geometry2D和CanvasItem的绘图函数实现斜线填充效果。 基础思路 Geometry2D类提供了多边形和多边形以及多边形与折线的布尔运算。按照自然的思路,多边形的斜线填充应该属于“多边形与折线的布尔运算”范畴。 第一个问题是如何获得斜线,这条斜线应该满足什么样

UniApp实现漂亮的音乐歌词滚动播放效果

在现代的音乐播放应用中,歌词的展示和滚动播放已经成为了一个非常常见的功能。今天,我们将通过UniApp来实现一个漂亮的歌词滚动播放功能。我们将使用UniApp提供的组件和API来完成这个任务。 页面结构 在页面的模板部分,我们需要创建一个音频播放器和歌词展示区域。使用<scroll-view>组件来实现歌词的滚动效果。 <template><view class="audio-co

用Java抓取CSDN主页上的图片

一,步骤一:获取网页源码 1,定义要爬取的页面的URL对象 //定义即将访问的链接String url="http://www.csdn.net";//获取CSDN的URL对象URL realURL = new URL(url); 2,获得这个链接的一个连接对象 URLConnection connection = realURL.openConnection();

Nuxt3入门:过渡效果(第5节)

你好同学,我是沐爸,欢迎点赞、收藏、评论和关注。 Nuxt 利用 Vue 的 <Transition> 组件在页面和布局之间应用过渡效果。 一、页面过渡效果 你可以启用页面过渡效果,以便对所有页面应用自动过渡效果。 nuxt.config.js export default defineNuxtConfig({app: {pageTransition: {name: 'fade',mode

Differential Diffusion,赋予每个像素它应有的力量,以及在comfyui中的测试效果

🥽原论文要点 首先是原论文地址:https://differential-diffusion.github.io/paper.pdf 其次是git介绍地址:GitHub - exx8/differential-diffusion 感兴趣的朋友们可以自行阅读。 首先,论文开篇就给了一个例子: 我们的方法根据给定的图片和文本提示,以不同的程度改变图像的不同区域。这种可控性允许我们再现