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

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


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">      <LinearLayout         android:layout_width="150dp"         android:layout_height="match_parent"         android:background="@color/colorPrimary"         android:orientation="vertical">          <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="LeftMenu"             android:textSize="20sp"             android:layout_margin="10dp"/>     LinearLayout>      <LinearLayout         android:layout_width="match_parent"         android:layout_height="match_parent"         android:gravity="center"         android:orientation="vertical">          <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="main"             android:textSize="30sp"             android:layout_margin="10dp"/>     LinearLayout>   androidx.slidingpanelayout.widget.SlidingPaneLayout>

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


左侧栏缩放

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

 SlidingPaneLayout slidingPaneLayout = findViewById(R.id.sliding_layout);  //获取到左侧导航栏 mLeftView = slidingPaneLayout.getChildAt(0); slidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {     @Override     public 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);     }     @Override     public void onPanelOpened(@NonNull View panel) {         //在滑动窗格完全打开时调用     }     @Override     public void onPanelClosed(@NonNull View panel) {         //当滑动窗格完全关闭时调用     } }); mLeftView = slidingPaneLayout.getChildAt(0); slidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {     @Override     public 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);     }     @Override     public void onPanelOpened(@NonNull View panel) {         //在滑动窗格完全打开时调用     }     @Override     public 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"


主要内容(右侧)缩放

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

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

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

mMainView.setElevation(6.0f * slideOffset);

自定义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      */     @Override     public boolean onInterceptTouchEvent(MotionEvent ev) {         if (ev.getAction() == MotionEvent.ACTION_MOVE) {             if (isForbid) {                 return false;             }         }         return super.onInterceptTouchEvent(ev);     }      @Override     public boolean onTouchEvent(MotionEvent ev) {         if (ev.getAction() == MotionEvent.ACTION_MOVE) {             if (isForbid) {                 return false;             }         }         return super.onTouchEvent(ev);     } }

Demo地址

https://github.com/barry-b/SlideMenuDemo

android 三个点按钮实现_Android 常用侧滑栏实现相关推荐

  1. android attrs获取_Android 常用侧滑栏实现

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

  2. android studio复选按钮样式_Android 自定义CheckBoxPreference的CheckBox复选框

    在使用Android的Preference,有时为了让我们的界面更加美观,我们会自定义自己的Preference.今天就主要说一下怎样自定义CheckBoxPreference的CheckBox按钮. ...

  3. Android 侧滑栏 (DrawerLayout)

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

  4. android 系统的切图方式_android APPUI设计、切图的常用尺寸大全

    今天在APPUI设计群里 ,不少朋友在问  android APPUI设计.切图的常用尺寸到底是多少?很不清楚,所以老谭在此跟大家分享下. Android 系统就被设计为一个可以在多种不同分辨率的设备 ...

  5. Android监听button按钮的click事件

    方式一: 提供所有按钮监听事件入口,在OnClick方法中通过View.getId()获取到发生点击事件的按钮Id,再进行相应的处理, 在页面有多个按钮的情况下比较适用. package com.ex ...

  6. 自定义Android带图片的按钮

    自定义Android带图片的按钮 前言 现在移动设备的按钮设计讲究大图标小文字,希望用户只要一看到图标便能知道这个按钮是干嘛的,但又要有必要的文字提示,最常见的就数搜索按钮了,上面一个大大的放大镜图标 ...

  7. Android studio:Button 按钮英文字符自动大写的解决方法

    Android studio:Button 按钮英文字符自动大写的解决方法 一.方法一:styles.xml文件里面添加<item name="textAllCaps"> ...

  8. android 中的悬浮按钮,Android 中FloatingActionButton(悬浮按钮)实例详解

    android 中floatingactionbutton(悬浮按钮)实例详解 一.介绍 这个类是继承自imageview的,所以对于这个控件我们可以使用imageview的所有属性 二.使用准备, ...

  9. Web学习第三天——HTML中input标签常用属性、框架集、内嵌框架

    第三天HTML中input标签常用属性.框架集.内嵌框架 一.input标签常用属性 表单数据提交特点: (一).文本框(text) (二).密码框(password) (三).单选按钮(radio) ...

最新文章

  1. 【SSM框架系列】Spring - JdbcTemplate声明式事务
  2. 65条最常用正则表达式
  3. python3 x默认使用的编码_python3默认使用什么编码
  4. Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart)
  5. Zookeeper概述、特点、数据模型
  6. python读取json格式的超参数
  7. Web.Config的学习
  8. 线程的异常捕获与线程池的异常捕获
  9. 一张纸厚度是多少毫米_一张纸对折后的厚度,有多可怕!——北京市第二十中学教科室“科技云课堂”(4)...
  10. 家装计算器php,家装计算器
  11. python中的zen原则到底是什么
  12. android 串口调试助手源码,android 串口调试工具源码
  13. 华为网络工程师终极面试题
  14. poi 同时 冻结第一行和第一列
  15. python群发邮件 不进垃圾箱_邮件群发如何不进垃圾箱
  16. Linux基础篇——Linux进程、服务管理
  17. 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十四)具体单板的GPIO操作方法
  18. 2023第十三届“中兴捧月”全球精英挑战赛今日正式启动
  19. 第六天 01-hydra工具windows远程桌面的密码爆破
  20. python获取评论数据

热门文章

  1. disabling directory browsing
  2. ArchLinux学习之环境变量
  3. 阿里巴巴右侧6滑块VS雅虎右侧6滑块VS自定义6滑块
  4. SpringMvc异步请求的使用及部分原理
  5. java.net.URLEncode编码 与 URLDecode解码问题
  6. 华为交换机默认vlan都是通的吗_【思唯网络学院】华为交换机常用的三种vlan划分方法...
  7. java tar 安装程序_linux下jdk的安装(tar包)
  8. excel添加列下拉框票价_excel表格下拉表格添加数据-excel2017表格中怎么制作下拉菜单列表框...
  9. cad安装日志文件发生错误_苹果电脑Mac os系统重装时出现“准备安装时发生错误”解决方案...
  10. Android工具里没有Android,android – AppCompat工具栏没有显示