Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码

左右側滑效果图

1.主页的实现

直接将DrawerLayout作为根布局,然后其内部第一个View为内容区域,第二个View为左側菜单,第三个View为右側側滑菜单,当前第三个是可选的。

布局:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/id_drawerLayout"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/img_frame_background" ><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/qq" ><Buttonandroid:layout_width="40dp"android:layout_height="30dp"android:layout_marginTop="10dp"android:layout_alignParentRight="true"android:layout_alignParentEnd="true" android:background="@drawable/youce"android:onClick="OpenRightMenu" /></RelativeLayout><fragmentandroid:id="@+id/id_left_menu"android:name="com.pcachy.drawerlayout.MenuLeftFragment"android:layout_width="200dp"android:layout_height="match_parent"android:layout_gravity="start"android:tag="LEFT" /><fragmentandroid:id="@+id/id_right_menu"android:name="com.pcachy.drawerlayout.MenuRightFragment"android:layout_width="100dp"android:layout_height="match_parent"android:layout_gravity="end"android:tag="RIGHT" /></android.support.v4.widget.DrawerLayout>

代码

package com.pcachy.drawerlayout;import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.widget.DrawerLayout;
import android.view.Gravity;
import android.view.View;
import android.view.Window;import com.nineoldandroids.view.ViewHelper;public class MainActivity extends FragmentActivity {private DrawerLayout mDrawerLayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);initView();initEvents();}private void initView(){mDrawerLayout = (DrawerLayout) findViewById(R.id.id_drawerLayout);mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.END);}private void initEvents(){mDrawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {@Overridepublic void onDrawerSlide(View drawerView, float slideOffset) {// TODO Auto-generated method stubView mContent = mDrawerLayout.getChildAt(0);View mMenu = drawerView;float scale = 1 - slideOffset;float rightScale = 0.8f + scale * 0.2f;if (drawerView.getTag().equals("LEFT")){float leftScale = 1 - 0.3f * scale;ViewHelper.setScaleX(mMenu, leftScale);ViewHelper.setScaleY(mMenu, leftScale);ViewHelper.setAlpha(mMenu, 0.6f + 0.4f * (1 - scale));ViewHelper.setTranslationX(mContent,mMenu.getMeasuredWidth() * (1 - scale));ViewHelper.setPivotX(mContent, 0);ViewHelper.setPivotY(mContent,mContent.getMeasuredHeight() / 2);mContent.invalidate();ViewHelper.setScaleX(mContent, rightScale);ViewHelper.setScaleY(mContent, rightScale);} else{ViewHelper.setTranslationX(mContent,-mMenu.getMeasuredWidth() * slideOffset);ViewHelper.setPivotX(mContent, mContent.getMeasuredWidth());ViewHelper.setPivotY(mContent,mContent.getMeasuredHeight() / 2);mContent.invalidate();ViewHelper.setScaleX(mContent, rightScale);ViewHelper.setScaleY(mContent, rightScale);}}@Overridepublic void onDrawerOpened(View drawerView) {// TODO Auto-generated method stub}@Overridepublic void onDrawerClosed(View drawerView) {// TODO Auto-generated method stubmDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.RIGHT);}@Overridepublic void onDrawerStateChanged(int newState) {// TODO Auto-generated method stub}});}public void OpenRightMenu(View view){mDrawerLayout.openDrawer(Gravity.RIGHT);mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, Gravity.RIGHT);}}

2.左菜单和右菜单布局(左菜单和右菜单的布局和代码随便你怎么写,这里是左菜单的样例)

<?

xml version="1.0" encoding="utf-8"?

> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00000000" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/one" android:layout_width="50dp" android:layout_height="50dp" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:src="@drawable/img_1" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:layout_toRightOf="@id/one" android:text="第1个Item" android:textColor="#f0f0f0" android:textSize="20sp" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/two" android:layout_width="50dp" android:layout_height="50dp" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:src="@drawable/img_2" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:layout_toRightOf="@id/two" android:text="第2个Item" android:textColor="#f0f0f0" android:textSize="20sp" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/three" android:layout_width="50dp" android:layout_height="50dp" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:src="@drawable/img_3" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:layout_toRightOf="@id/three" android:text="第3个Item" android:textColor="#f0f0f0" android:textSize="20sp" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/four" android:layout_width="50dp" android:layout_height="50dp" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:src="@drawable/img_4" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:layout_toRightOf="@id/four" android:text="第4个Item" android:textColor="#f0f0f0" android:textSize="20sp" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/five" android:layout_width="50dp" android:layout_height="50dp" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:src="@drawable/img_5" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:layout_toRightOf="@id/five" android:text="第5个Item" android:textColor="#f0f0f0" android:textSize="20sp" /> </RelativeLayout> </LinearLayout> </RelativeLayout>

1、为了模拟QQ的右側菜单须要点击才干出现。所以在初始化DrawerLayout的时候,使用了mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,Gravity.RIGHT);意思是仅仅有编程才干将其弹出。然后在弹出以后。须要让手势能够滑动回去,所以在OpenRightMenu中又编写了:mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED,Gravity.RIGHT); UNLOCK了一下。

最后在onDrawerClosed回调中。继续设置mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,Gravity.RIGHT)。

2、动画效果动画用了nineoldandroids。

3、setDrawerListener
通过代码也能看出来,能够使用setDrawerListener监听菜单的打开与关闭等等。这里对于当前操作是哪个菜单的推断是通过TAG推断的。我认为使用gravity应该也能推断出来

源代码下载地址:http://download.csdn.net/detail/pcaxb/9042309

Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码相关推荐

  1. Android DrawerLayout 高仿QQ5.2双向侧滑菜单

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/41531475,本文出自: [张鸿洋的博客] 1.概述 之前写了一个Androi ...

  2. DrawerLayout 高仿QQ5.2双向侧滑菜单

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/41531475,本文出自: [张鸿洋的博客] 1.概述 之前写了一个Androi ...

  3. Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39257409,本文出自[张鸿洋的博客] 上一篇博客带大家实现了:Android ...

  4. android高仿全民直播、多窗口管理、图标效果、开发框架,下拉上滑、UI框架等源码...

    Android精选源码 android仿UC浏览器多窗口管理界面 android高仿全民直播项目源码 android微信小程序设计模式,多任务窗体运行源码 Android项目源码在线课堂教育UI框架源 ...

  5. android高仿全民直播、多窗口管理、图标效果、开发框架,下拉上滑、UI框架等源码

    Android精选源码 android仿UC浏览器多窗口管理界面 android高仿全民直播项目源码 android微信小程序设计模式,多任务窗体运行源码 Android项目源码在线课堂教育UI框架源 ...

  6. Android 高仿微信6.0主界面 带你玩转切换图标变色

    目录(?)[+] 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41087219,本文出自:[张鸿洋的博客] 1.概述 学习And ...

  7. Android 高仿微信头像截取 打造不一样的自定义控件

    转载请表明出处: http://blog.csdn.net/lmj623565791/article/details/39761281,本文出自: [张鸿洋的博客] 1.概述 前面已经写了关于检测手势 ...

  8. android+高仿视频录制,Android高仿微信拍照控件,实战推荐!

    原标题:Android高仿微信拍照控件,实战推荐! 作者:陈嘉桐 转自:ttps://github.com/CJT2325 控件介绍 不知道是不是在微信更新到6.0版本之后,微信将它的拍照和录制视频的 ...

  9. Android 高仿微信图片选择器

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自: [张鸿洋的博客] 1.概述 关于手机图片加载器,在当 ...

最新文章

  1. BootLoader与MCU启动过程
  2. 我理解的分类、目标检测、目标识别、目标定位、目标跟踪
  3. syslog记录history历史记录
  4. 防止stack buffer overflows攻击的方法 : ShadowCallStack
  5. java jdk 1.8 配置_java_Day01: java的jdk环境变量配置(1.8)
  6. Android Monkey压力测试
  7. php 正则匹配unicode,PHP中正则表达式对UNICODE字符码的匹配方法
  8. 格式化时间格式LocalDateTime转String日期
  9. 李飞飞斯坦福博士提出SLIDE模型
  10. 你有没有想过,在SpringBoot集成下,Mybatis的mapper代理对象究竟是如何生成的?...
  11. java可以做网页吗_如果我用java 只会做网页,那么我会不会被淘汰?
  12. 向小伙伴讲讲搜索引擎?读完这个文章先
  13. HBase 表修复在线方式和离线方式
  14. Python干货分享+百G资源放送!
  15. 海康信号灯控制机服务器,交通信号控制硬件设备简介
  16. 时延估计器的蒙特卡洛仿真分析
  17. 批量语音转文字python
  18. 基于知识图谱的智能问答机器人技术架构
  19. 【资料分享】正念书单:7大经典著作,有效释放压力、缓解焦虑、治疗抑郁!
  20. 【扫盲】硬盘接口『 SATA 、 mSATA 、 m.2 ( NGFF )、PCI-E ( PICe 、 PCI Express ) 』及其协议 『 NVMe 、 AHCI 』

热门文章

  1. MySQL学习笔记17:别名
  2. Win7 不能安装SQL Server 2005 Management Studio Express.msi解决办法
  3. Linux安全手册(转载)
  4. Flash与.NET的通信(三):LoadVars对象的应用
  5. 堆的应用--并查集解决“擒贼先擒王”问题(JAVA)
  6. java中二进制怎么说_面试常用:说清楚Java中synchronized和volatile的区别
  7. python索引例子_Python实现带下标索引的遍历操作示例
  8. discuz设置用户每天回帖数_discuz回贴通知插件实现-显示用户状态设置
  9. java中catch ()_有关java中的try{}catch(){}的讲解
  10. 机器学习笔记(四)——最大似然估计