我们在平常使用手机时可以看到很多的App的会有侧滑菜单栏的效果,这次我将使用SlidingPaneLayout来实现这个功能。

首先我们先看下最终效果:


1. SlidingPaneLayout

SlidingPaneLayout提供了一个水平的、多窗格的布局。使用该控件我们可以实现侧滑的效果,其布局文件下面的第一个子控件是作为一个导航视图(也就是滑动后左边视图),其余部分是内容视图。

可以简单的尝试一下

 <?xml version="1.0" encoding="utf-8"?><androidx.slidingpanelayout.widget.SlidingPaneLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"tools:context=".MainActivity">​<LinearLayoutandroid:layout_width="150dp"android:layout_height="match_parent"android:background="@color/colorPrimary"android:orientation="vertical">​<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="LeftMenu"android:textSize="20sp"android:layout_margin="10dp"/></LinearLayout>​<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical">​<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="main"android:textSize="30sp"android:layout_margin="10dp"/></LinearLayout>​​</androidx.slidingpanelayout.widget.SlidingPaneLayout>

通过上面的布局,我们可以实现一个测滑的效果

2. 左侧栏缩放

通过下面这段代码,使得左侧栏滑动时有一个缩放的效果

 SlidingPaneLayout slidingPaneLayout = findViewById(R.id.sliding_layout);//获取到左侧导航栏mLeftView = slidingPaneLayout.getChildAt(0);slidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {@Overridepublic void onPanelSlide(@NonNull View panel, float slideOffset) {//滑动窗格的位置更改时调用//设置侧面栏缩放mLeftView.setPivotX(-mLeftView.getWidth() / 6.0f);mLeftView.setPivotY(mLeftView.getHeight() / 2.0f);mLeftView.setScaleX(0.7f + 0.3f * slideOffset);mLeftView.setScaleY(0.7f + 0.3f * slideOffset);}@Overridepublic void onPanelOpened(@NonNull View panel) {//在滑动窗格完全打开时调用}@Overridepublic void onPanelClosed(@NonNull View panel) {//当滑动窗格完全关闭时调用}});

在onPaneSlide中有两个参数,第一个参数是被移动的view,第二个参数则是滑动时的偏移值,范围是0~1

当我们对一个View设置缩放动画时,缩放轴点默认是该View的中心点。如果我们想改变缩放轴点位置,可以通过setPivotX(float pivotX)设置缩放轴点X轴的坐标,通过setPivotY(float pivotY)设置缩放轴点Y轴的坐标。再通过setScaleX和setScaleY来实现最终的缩放效果。

实现效果:

在SlidingPaneLayout下添加个背景颜色效果会更好些

 android:background="@color/colorPrimary"

3. 主要内容(右侧)缩放

在onPanelSlide方法下加上下面一段代码,即可实现

 mMainView.setScaleX(1f - 0.3f * slideOffset);mMainView.setScaleY(1f - 0.3f * slideOffset);

还可以再给右边设置个阴影的效果

 mMainView.setElevation(6.0f * slideOffset);

4. 自定义SlidingPaneLayout

上面就是最终要实现的侧滑栏的三个最主要的内容。理解上面三个其实就可以做出一开始给的那种效果。但有些时候,可能我们不希望通过滑动来显示出左边的导航栏,而是直接通过点击一个按钮来打开左边栏。在SlidingPaneLayout中并没这样的方发来禁止它滑动,这时候我们就需要自己来自定义。

 public class CusSlidingPaneLayout extends SlidingPaneLayout {​//是否禁止private boolean isForbid = false;​public CusSlidingPaneLayout(@NonNull Context context) {this(context, null);}​public CusSlidingPaneLayout(@NonNull Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0);}​public CusSlidingPaneLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}​/*** 让外面可以调用此方法来禁止滑动** @param isForbid*/public void forbidSlide(boolean isForbid) {this.isForbid = isForbid;}​/*** 拦截触屏事件** @param ev* @return*/@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {if (ev.getAction() == MotionEvent.ACTION_MOVE) {if (isForbid) {return false;}}return super.onInterceptTouchEvent(ev);}​@Overridepublic boolean onTouchEvent(MotionEvent ev) {if (ev.getAction() == MotionEvent.ACTION_MOVE) {if (isForbid) {return false;}}return super.onTouchEvent(ev);}}


Demo

android attrs获取_Android 常用侧滑栏实现相关推荐

  1. android 三个点按钮实现_Android 常用侧滑栏实现

    我们在平常使用手机时可以看到很多的App的会有侧滑菜单栏的效果,这次我将使用SlidingPaneLayout来实现这个功能. 首先我们先看下最终效果: SlidingPaneLayout Slidi ...

  2. android shn1 获取_Android Studio获取开发版SHA1值和发布版SHA1值的史上最详细方法

    前言:使用百度地图时需要秘钥,申请秘钥时需要SHA1值,所以今天就总结一下怎么获取这个值. 正常情况下: 一.获取开发版SHA1: 在此我直接用AndroidStudio提供的命令控制台了,毕竟做An ...

  3. Android 侧滑栏 (DrawerLayout)

    DrawerLayout 实现侧滑栏非常简单 支持左滑动以及右滑动 默认滑动出来侧滑栏 DrawerLayout  需要引入support:appcompat 库,一般创建项目的时候自带的有,这个库就 ...

  4. Flutter 侧滑栏UI及城市选择UI的实现

    转载自北斗星_And大神的博客,未经原博主同意,禁止转载 前言   目前移动市场上很多业务都需要开发Android/IOS两个端,开发成本比较高. Flutter 在跨端上凭借着性能优势关注量,使用度 ...

  5. android:自定义HorizontalScrollView实现qq侧滑菜单

    今天看了鸿洋_大神在慕课网讲的qq5.0侧滑菜单.学了不少的知识,同时也佩服鸿洋_大神思路的清晰. 看了教程课下也自己实现了一下.代码几乎完全相同  别喷我啊..没办法 o(︶︿︶)o 唉 像素不好 ...

  6. android编译系统root权限,Android系统获取ROOT权限后能做些什么?

    Android的设备Root了以后可以做些什么特别的操作呢?今天刷机之家小编为大家简述Root以后最实用的几种用途. 在了解Root的用途之前,我们先来简单看看Android的Root是什么. And ...

  7. 【微信小程序】侧滑栏,手动侧滑出个人中心(完整代码附效果图)

    微信小程序开发交流qq群   581478349    承接微信小程序开发.扫码加微信. 正文: 博文分三部分,1.效果图及功能效果说明  2.实现思路  3.源代码  欢迎加入微信小程序开发交流群( ...

  8. Android手机系统adb常用的命令

     adb常用的命令有哪些?小编今天为大家奉上Android手机系统adb常用的命令,内容如下: 要使用adb命令,手机需要打开USB debug. 安装软件 adb install apk文件名称 ...

  9. Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用

    关于PackageManager和ActivityManager的使用 ,自己也写了一些DEMO 了,基本上写的线路参考了Settings模块下的 应用程序,大家如果真正的有所兴趣,建议大家看看源码, ...

最新文章

  1. Apache2.2安装图解
  2. jQuery js 互转
  3. Java后台返回和处理JSon数据的方法
  4. Linux下tmp文件夹的文件自动删除的问题(转)
  5. 【数据结构与算法】之深入解析“股票的最大利润”的求解思路与算法示例
  6. 《城市建筑美学》读书笔记
  7. Swift快速参考手册
  8. 这就是数据分析之数据采集
  9. 挑战 Oracle 的全球首个 AI 原生数据库 GaussDB,华为将开源
  10. 深入解析C/C++的优缺点以及就业方向
  11. listview 加载的时候报java.lang.IllegalArgumentException: column ‘_id’ does not exist 错误
  12. 演示:扩展ACL的配置与应用技巧
  13. PDFObject无法加载远程url和不支持IE浏览器解决方案
  14. 中国人工智能神经网络技术现状
  15. 你控制不了情绪,怎么过得好这一生?
  16. 基于消息系统架构设计
  17. IT大学生成长周报 | 第 3 期
  18. CVPR2018 CartoonGAN 解读
  19. 工作篇 之 高仿微信双击消息弹出可自由复制
  20. python的字符串、列表、元组、字典、集合

热门文章

  1. Git学习笔记:分支管理(2)
  2. [云炬创业学笔记]第一章创业是什么测试14
  3. [云炬创业基础笔记] 第四章测试1
  4. 科大星云诗社动态20210330
  5. 云炬Android开发笔记 5-3,4Restful请求的处理
  6. 吴恩达《优化深度神经网络》精炼笔记(1)-- 深度学习的实用层面
  7. php 表单录入,PHP 表单和用户输入
  8. java map 查找_Map 查找表操作
  9. Asp.net常用优化方法
  10. xml中的常用操作示例