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,一经查实,立即删除!

相关文章

建筑与计算机技术,建筑设计中常用的计算机技术与注意点

《建筑设计中常用的计算机技术与注意点》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《建筑设计中常用的计算机技术与注意点(3页珍藏版)》请在装配图网上搜索。1、建筑设计中常用的计算机技术与注意点引言&#xff1a;目前我国的经济正在不断的发展&#xff0c;同时…

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

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

mysql 分页 order_Mysql查询使用limit分页,同时使用order by可能产生的问题

昨天遇到一个比较诡异的问题&#xff0c;在使用MySQL分页查询数据的时候&#xff0c;有的数据明明数据库里有&#xff0c;但是就是查不出来&#xff0c;有的数据却反而会重复出现。这里面就涉及到一个MySQL自身的问题。具体现象大概是&#xff1a;当使用order by 的字段有多个相…

中国上海量子计算机,首台光量子计算机在上海亮相

世界首台超越早期经典计算机的光量子计算机5月3日在上海亮相&#xff0c;十个超导量子比特纠缠首次成功实现&#xff0c;中国科学家再次站在创新的前沿。芯片越来越小&#xff0c;传统计算机未来必将遭遇计算极限。求解一个亿亿亿变量(10的24次方)的方程组&#xff0c;利用目前…

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

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

计算机巧用剪纸做画册教案,3 巧折巧剪教案公开课一等奖

巧折巧剪一、教学目标1.感受剪纸艺术的美&#xff0c;进一步了解剪纸的艺术特点&#xff0c;学习巧用折剪法进行剪纸创作。2.通过折与剪的方式&#xff0c;用对称剪纸的方法&#xff0c;设计制作一张好看的剪纸作品。3.感受剪纸的趣味和美感&#xff0c;激发对剪纸艺术的热爱。…

mysql rpl_MySQL管理工具MySQL Utilities — mysqlrplcheck(44)

mysqlrplcheck 工具是用来检查复制的先决条件的。这些检查的设计或者说是测试&#xff0c;是用来确保复制的健康。测试的内容有&#xff1a;在主上是否启用了二进制&#xff1f;是否有排除某些二进制(如有*_do_db 或 *_ignore_db的设置)&#xff1f;如果有&#xff0c;显示它们…

计算机视觉与图像处理面试题,深度学习图像处理算法工程师面试题

AI开发平台ModelArtsModelArts是面向开发者的一站式AI开发平台&#xff0c;为机器学习与深度学习提供海量数据预处理及半自动化标注、大规模分布式Training、自动化模型生成&#xff0c;及端-边-云模型按需部署能力&#xff0c;帮助用户快速创建和部署模型&#xff0c;管理全周…

inno setup 打包mysql_使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包

1 ; 脚本由 Inno Setup 脚本向导 生成&#xff01;2 ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档&#xff01;34 #define MyAppName "abc"5 #define MyAppVersion "1.0"6 #define MyAppPublisher "aaa"7 #define MyAppURL "ht…

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

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

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

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

计算机应用基础 a卷,计算机应用基础笔试A卷.doc

文档介绍&#xff1a;计算机应用基础笔试A卷.doc汕头职业技术学校12级2012-2013学年度第二学期期末考试《计算机应用基础》A卷••n|r>•• ••多途第一部分第二部分总分一、选择题(30分)二、填空题(10分)三、判断题(10分)三、上机操作题(50分)第一部分笔试题考试时间:50分…

win7装mysql一直未响应_求助啊 WIN7下安装mysql出问题 老是说未响应~!!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼## The following options will be read by the MySQL Server. Make sure that# you have installed the server correctly (see above) so it reads this# file.#[mysqld]# The TCP/IP Port the MySQL Server will listen onport3…

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

随着智能手机的普及&#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;对于喜欢对称设计的玩家来…

keepalived vip mysql_mysql+keepalived高可用集群

mysqlkeepalived高可用集群我们了解在LVS集群当中&#xff0c;LVS是整个机群的唯一入口&#xff01;如果LVS出现故障的话&#xff0c;那么整个集群都将无法访问&#xff01;像这种重要的服务器只有一台服务器在工作的情况&#xff0c;如果出现故障会对集群有较大的影响&#xf…

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

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

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

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

mysql query cache_MySQL--query-cache

知识准备&#xff1a;1、mysql 的query-cache是什么&#xff1f;mysql可以把执行完成的select 语句和这个select 语句对应的结果集缓存起来&#xff1b;下次再用调用相同的select 语句时就直接返回结果&#xff0c;不是又去执行一次select 语句。由于少了执行的这一步&#xff…