android attrs获取_Android 常用侧滑栏实现
我们在平常使用手机时可以看到很多的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 常用侧滑栏实现相关推荐
- android 三个点按钮实现_Android 常用侧滑栏实现
我们在平常使用手机时可以看到很多的App的会有侧滑菜单栏的效果,这次我将使用SlidingPaneLayout来实现这个功能. 首先我们先看下最终效果: SlidingPaneLayout Slidi ...
- android shn1 获取_Android Studio获取开发版SHA1值和发布版SHA1值的史上最详细方法
前言:使用百度地图时需要秘钥,申请秘钥时需要SHA1值,所以今天就总结一下怎么获取这个值. 正常情况下: 一.获取开发版SHA1: 在此我直接用AndroidStudio提供的命令控制台了,毕竟做An ...
- Android 侧滑栏 (DrawerLayout)
DrawerLayout 实现侧滑栏非常简单 支持左滑动以及右滑动 默认滑动出来侧滑栏 DrawerLayout 需要引入support:appcompat 库,一般创建项目的时候自带的有,这个库就 ...
- Flutter 侧滑栏UI及城市选择UI的实现
转载自北斗星_And大神的博客,未经原博主同意,禁止转载 前言 目前移动市场上很多业务都需要开发Android/IOS两个端,开发成本比较高. Flutter 在跨端上凭借着性能优势关注量,使用度 ...
- android:自定义HorizontalScrollView实现qq侧滑菜单
今天看了鸿洋_大神在慕课网讲的qq5.0侧滑菜单.学了不少的知识,同时也佩服鸿洋_大神思路的清晰. 看了教程课下也自己实现了一下.代码几乎完全相同 别喷我啊..没办法 o(︶︿︶)o 唉 像素不好 ...
- android编译系统root权限,Android系统获取ROOT权限后能做些什么?
Android的设备Root了以后可以做些什么特别的操作呢?今天刷机之家小编为大家简述Root以后最实用的几种用途. 在了解Root的用途之前,我们先来简单看看Android的Root是什么. And ...
- 【微信小程序】侧滑栏,手动侧滑出个人中心(完整代码附效果图)
微信小程序开发交流qq群 581478349 承接微信小程序开发.扫码加微信. 正文: 博文分三部分,1.效果图及功能效果说明 2.实现思路 3.源代码 欢迎加入微信小程序开发交流群( ...
- Android手机系统adb常用的命令
adb常用的命令有哪些?小编今天为大家奉上Android手机系统adb常用的命令,内容如下: 要使用adb命令,手机需要打开USB debug. 安装软件 adb install apk文件名称 ...
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
关于PackageManager和ActivityManager的使用 ,自己也写了一些DEMO 了,基本上写的线路参考了Settings模块下的 应用程序,大家如果真正的有所兴趣,建议大家看看源码, ...
最新文章
- Apache2.2安装图解
- jQuery js 互转
- Java后台返回和处理JSon数据的方法
- Linux下tmp文件夹的文件自动删除的问题(转)
- 【数据结构与算法】之深入解析“股票的最大利润”的求解思路与算法示例
- 《城市建筑美学》读书笔记
- Swift快速参考手册
- 这就是数据分析之数据采集
- 挑战 Oracle 的全球首个 AI 原生数据库 GaussDB,华为将开源
- 深入解析C/C++的优缺点以及就业方向
- listview 加载的时候报java.lang.IllegalArgumentException: column ‘_id’ does not exist 错误
- 演示:扩展ACL的配置与应用技巧
- PDFObject无法加载远程url和不支持IE浏览器解决方案
- 中国人工智能神经网络技术现状
- 你控制不了情绪,怎么过得好这一生?
- 基于消息系统架构设计
- IT大学生成长周报 | 第 3 期
- CVPR2018 CartoonGAN 解读
- 工作篇 之 高仿微信双击消息弹出可自由复制
- python的字符串、列表、元组、字典、集合