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

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

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

96a62a5689cb250157dbf7058da71226.gif


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>

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

a47def26326c024930565707892cc8c8.gif


左侧栏缩放

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

 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来实现最终的缩放效果。

实现效果:

744b91f368e91c3aa0d251f93401d7e1.gif

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

android:background="@color/colorPrimary"

d4922e337aea7fb89192d4c99fd66d12.gif


主要内容(右侧)缩放

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

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

64fd7817097f3f81aed45f70a3c07820.gif

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 插入优化_MySQL批量SQL插入性能优化

对于一些数据量较大的系统&#xff0c;数据库面临的问题除了查询效率低下&#xff0c;还有就是数据入库时间长。特别像报表系统&#xff0c;每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此&#xff0c;优化数据库插入性能是很有意义的。经过对MySQL Inno…

mysql 前索引_MySQL查询性能优化前,必须先掌握MySQL索引理论

数据库索引在平时的工作是必备的&#xff0c;怎么建好索引&#xff0c;怎么使用索引&#xff0c;可以提高数据的查询效率。而且在面试过程&#xff0c;数据库的索引也是必问的知识点&#xff0c;比如&#xff1a;索引底层结构选型&#xff0c;那为什么选择B树?不同存储引擎的索…

计算机维护系统Win8PE,win8如何进入PE重装电脑系统

电脑进入PE系统有很多种办法&#xff0c;但是最简单的莫过于本地模式。通过韩博士中的本地模式功能下载PE镜像文件&#xff0c;就可以直接进入到PE桌面进行电脑系统重装。如果你不信&#xff0c;就跟着下面的流程走一次。小编有话说&#xff1a;大家在打开韩博士装机大师软件之…

电子科技大学 高级计算机结构,电子科技大学计算机系统结构作业答案

电子科技大学计算机系统结构作业答案 (26页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;1.90 积分查看考卷——作业提交1 当前得分&#xff1a;5 分(总分&#xff1a;100 分)&#xff0c;折合成百分…

测试手机速度的软件叫什么,手机测网速哪个软件好? 精确测速软件推荐

随着智能手机的普及&#xff0c;现在人们几乎已经人手一部手机。4G网络在我国已经非常的普及了&#xff0c;但是我们在使用手机时时常还是会发现会出现断网的情况&#xff0c;严重的影响了我们的工作以及上网体验&#xff0c;特别是在我们看视频或者打游戏时断网&#xff0c;更…

python在末尾加关闭程序_廖雪峰的Python教程教程-02

廖雪峰的Python教程&#xff1a;Python教程​www.liaoxuefeng.com廖老师的小结&#xff1a;1) list[]&#xff0c;一种有序的集合&#xff1a;用len()函数可以获得list元素的个数&#xff1b;索引是从0开始&#xff0c;最后一个元素的索引是len(list)-1&#xff1b;list.append…

sensei鼠标测试软件,'黑科技'传感器打造出的FPS利器 - 赛睿Sensei 310 鼠标

黑科技传感器打造出的FPS利器 - 赛睿Sensei 310 鼠标2018-03-12 10:00:0010点赞13收藏20评论*级电竞外设品牌SteelSeries赛睿2017年在鼠标领域依靠Rival系列攻城掠地, 从低到高都有覆盖&#xff0c;但Rival系列全系都是右手的人体工学设计&#xff0c;对于喜欢对称设计的玩家来…

汉字计算机编码是谁发明的,神奇的汉字编码,了解一下

一直觉得不是由中国人发明的计算机&#xff0c;却可以使用汉字进行界面交互非常神奇。今天就来和大家聊一下关于汉字编码的最底层的逻辑。(1)汉字信息交换码(国标码)汉字交换码是指不同的具有汉字处理功能的计算机系统之间在交换汉字信息时所使用的代码标准。国家标准GB2312-80…

怎么把foxmail的邮件和服务器同步,foxmail设置ActiveSync同步功能怎么操作?设置ActiveSync同步功能方法介绍...

foxmail设置ActiveSync同步功能的操作常常困扰着不少用户&#xff0c;下面笔者就分享了foxmail设置ActiveSync同步功能的操作方法&#xff0c;不懂的朋友一起来看看吧。foxmail设置ActiveSync同步功能的操作方法一、开启和关闭"ActiveSync同步"功能的操作对新建QQMai…

php页面不断弹出值_电脑自动弹出网页怎么办

电脑自动弹出网页的解决方法&#xff1a;我们可以利用360安全卫士中的弹窗过滤工具来解决此问题。首先我们打开360安全卫士&#xff1b;然后找到弹窗过滤工具&#xff1b;最后选择【强力模式】&#xff0c;保存设置即可。电脑自动弹出网页可以使用360安全卫士来进行弹窗拦截。打…

css怎样使弹跳的小球旋转,如何使用纯CSS实现小球跳跃台阶的动画效果(附源码)...

本篇文章给大家带来的内容是关于如何使用纯CSS实现小球跳跃台阶的动画效果(附源码) &#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。效果预览源代码下载https://github.com/comehope/front-end-daily-challenges代码解读定义…

怎么把4399小游戏的代码_25行代码带你爬取4399小游戏数据,看下童年的游戏是否还在...

前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。还记得童年的网页小游戏吗&#xff1f;今天带大家爬取4399小游戏网站的数据&#xff0c;游戏名字链接地址目标网站http://www.4399.com/基本环境配置python 3.6pycharm…

如何使mysql编码格式_Mysql设置编码方式及基本操作

介绍Mysql 默认安装后的编码方式默认一般是Latin, 在插入汉字数据或读取的时候&#xff0c;存在乱码或报错。这时候&#xff0c;只需要修改编码方式为UTF8&#xff0c;统一数据库和数据表的编码方式。如何修改1、 复制MySQL数据库中的配置文件&#xff0c;然后粘贴重命名为my.i…

ftp服务器复制粘贴文件夹,ftp服务器复制粘贴文件夹

ftp服务器复制粘贴文件夹 内容精选换一换下载地址&#xff1a;https://varnish-cache.org/_downloads/varnish-6.2.0.tgz若服务器可以访问网络&#xff0c;则可以直接在服务器上使用wget命令下载源码。--prefixPATH&#xff1a;指定Varnish的安装目录。HSS默认会将防护目录下的…

怎么把项目的数据上传到服务器,怎么把sql数据库上传到云服务器

怎么把sql数据库上传到云服务器 内容精选换一换本章介绍如何在管理控制台购买GaussDB(for openGauss)实例&#xff0c;并通过内网使用弹性云服务器连接GaussDB(for openGauss)实例。GaussDB(for openGauss)提供gsql工具帮助您在命令行下连接数据库&#xff0c;您需要提前创建一…

微信无连接服务器1.104,微信成语猜猜看太子少师答案汇总 太子少师1-104关攻略...

本文导航第1页&#xff1a; 太子少师第8页&#xff1a;翰林第2页&#xff1a;学童第9页&#xff1a;侍郎第3页&#xff1a;童生第10页&#xff1a;尚书第4页&#xff1a;秀才第11页&#xff1a;大学士第5页&#xff1a;举人第12页&#xff1a;御史第6页&#xff1a;贡士第13页&…

java微博开发_【新手入门篇】新浪微博应用开发之Java入门篇

新浪微博应用开发之Java篇2012年11月11日星期日一、开发流程简介&#xff1a;2、 在以下地址创建一个应用&#xff0c;假设创建一个桌面应用&#xff1a;3、 进入管理中心&#xff0c;查看并记住应用ID和密码&#xff1a;4、 在“应用中心-高级信息”设置回调页面(设置后一般…

flex java oracle_Flex使用Blazeds与Java交互及自定义对象转换详解-DATAGRID读取ORACLE数据...

一、建立Flex与Java交互的工程。本文中讲到的交互是利用Blazeds的&#xff0c;因为这个是免费的&#xff0c;呵呵&#xff0c;我是穷人。首先就是去下载Blazeds的压缩包&#xff0c;这个可以从官网或者CSDN、JavaEye上下到。解压缩这个包&#xff0c;将里面的Blazeds.war解压&a…

lfu算法实现java_LFU五种实现方式,从简单到复杂

前言最近刷力扣题&#xff0c;对于我这种 0 基础来说&#xff0c;真的是脑壳疼啊。这个月我估计都是中等和困难题&#xff0c;没有简单题了。幸好&#xff0c;力扣上有各种大牛给写题解。看着他们行云流水的代码&#xff0c;真的是羡慕不已。让我印象最深刻的就是人称 “甜姨”…

java控制台高级_K9s Kubernetes的高级控制台

K9s Kubernetes CLI&#xff0c;以个性化方式管理您的集群&#xff01;参考&#xff1a;Why K9s&#xff1f;首先我们得面对现实——Kubernetes及其周边生态系统的运营方式正变得越来越复杂。集群管理需要大量工具加以配合。当我在集群之上进行日常运营时&#xff0c;和大家一样…