nineoldandroid 详细使用并且实现drawerlayout侧滑动画

nineoldandroid.view.ViewHelpe是一个为了兼容3.0以下的一个动画开源库

相关函数解读:(第一个参数都为动画对象,第二个为动画属性值的变化表达式)

  ViewHelper.setTranslationX(,);//x方向平移

  ViewHelper.setTranslationY(,);

  ViewHelper.setScaleX(,);x方向变化大小

  ViewHelper.setScaleY(,);

  ViewHelper.setAlpha(,);透明度变化

  ViewHelper.setPivotY(,);大小变化x方向的中心

  ViewHelper.setPivotX(,);

例如在drawerlayout中通过监听drawerlayout的滑动来设置动画(这里的监听器开始设置成了set。。。已经过时,两者没什么使用上的区别,只是会判断一次是否为空)

mDrawerLayout.addDrawerListener(new DrawerListener()//设置抽提监听事件,添加监听器
        {
            public void onDrawerStateChanged(int newState)//状态监听
            {
            }

            public void onDrawerSlide(View drawerView, float slideOffset)//滑动监听
            {
                View mContent = mDrawerLayout.getChildAt(0);//返回抽屉布局中的索引为0的子view
                View mMenu = drawerView;
                float scale = 1 - slideOffset;//偏移量导致scale从1.0-0.0
                float rightScale = 0.8f + scale * 0.2f;//将内容区域从1.0-0.0转化为1.0-0.8

                if (drawerView.getTag().equals("LEFT"))
                {

                    float leftScale = 1 - 0.3f * scale;//0.7-1.0
                    ViewHelper.setScaleX(mMenu, leftScale);
                    ViewHelper.setScaleY(mMenu, leftScale);
                    ViewHelper.setAlpha(mMenu, 0.6f + 0.4f * (1 - scale));//开始这里设置成了这样,导致背景透明度有1.0-0.6
//                    ViewHelper.setAlpha(mMenu, 0.6f + 0.4f * scale);
                    ViewHelper.setTranslationX(mContent,
                            mMenu.getMeasuredWidth() * (1 - scale));
                    ViewHelper.setPivotX(mContent, 0);
                    ViewHelper.setPivotY(mContent,
                            mContent.getMeasuredHeight() / 2);
                    mContent.invalidate();
                    ViewHelper.setScaleX(mContent, rightScale);
                    ViewHelper.setScaleY(mContent, rightScale);
                } else
                {
                    ViewHelper.setTranslationX(mContent,
                            -mMenu.getMeasuredWidth() * slideOffset);
                    //设置大小变化的中心
                    ViewHelper.setPivotX(mContent, mContent.getMeasuredWidth());
                    ViewHelper.setPivotY(mContent,
                            mContent.getMeasuredHeight() / 2);
                    mContent.invalidate();
                    ViewHelper.setScaleX(mContent, rightScale);
                    ViewHelper.setScaleY(mContent, rightScale);
                }

            }

            public void onDrawerOpened(View drawerView)
            {
            }

            public void onDrawerClosed(View drawerView)
            {
                mDrawerLayout.setDrawerLockMode(
                        DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.RIGHT);
            }
        });

关于滑动中动画属性的转化:

1、首先是内容区域的缩放比例计算:

我们准备让在菜单出现的过程中,让内容区域从1.0~0.8进行变化

float rightScale = 0.8f + scale * 0.2f; (scale 从1到0 )

2、菜单的缩放比例计算

仔细观察了下QQ,菜单大概缩放变化是0.7~1.0

float leftScale = 1 - 0.3f * scale;

3、菜单的透明度比例:

我们设置为0.6~1.0;即:0.6f + 0.4f * (1 - scale)

4、菜单的x方向偏移量:

看一下QQ,并非完全从被内容区域覆盖,还是有一点拖出的感觉,所以我们的偏移量这么设置:

tranlateX = mMenuWidth * scale * 0.6f ;

时间: 2024-08-14 16:03:32

nineoldandroid 详细使用并且实现drawerlayout侧滑动画的相关文章

iOS:抽屉侧滑动画两种形式(1、UIView侧滑 2、ViewController侧滑)

前言: 在iOS中抽屉动画是很常用的一种技术,使用它有很炫的体验效果,为app增添特色,形式就两种,一个是UIView的侧滑,另一个就是ViewController的侧滑. 实现方式: 抽屉侧滑动画有三种方式,一种是UIView的侧滑:一种是使用MMDrawerController框架实现控制器的侧滑:最后一种使用系统的UIScreenEdgePanGestureRecognizer实现侧滑. 第一种方式: UIView的侧滑动画,分别为leftView.mainView.rightView,主

Android: DrawerLayout 侧滑菜单栏

DrawerLayout是SupportLibrary包中实现的侧滑菜单效果的控件. 分为主内容区域和侧边菜单区域 drawerLayout本身就支持:侧边菜单根据手势展开与隐藏, 开发者只需要实现:主内容区的内容和菜单的点击变化即可. API:https://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html 1. DrawerLayout本身就是一个顶级容器,只需要按照规定的布局方式写布局就会

Android Studio官方版DrawerLayout侧滑菜单解析

效果图如下 这是使用Android Studio新建的一个DrawerLayout项目跑出来后的效果(没有Android Studio的盆友赶紧去下载个吧). 生成后的代码有点混乱,稍微整理一下,那么先看布局文件 activity_main.xml: <?xml version="1.0" encoding="utf-8"?>   <android.support.v4.widget.DrawerLayout xmlns:android="

DrawerLayout侧滑菜单

注意事项: DrawerLayout最好为界面的根布局,否则可能会出现触摸事件被屏蔽的问题 主内容区的布局代码要放在侧滑菜单布局的前面---策划菜单必须放最后 侧滑菜单部分的布局(这里是ListView)必须设置layout_gravity属性 界面的根布局 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android=&qu

自定义View ----QQ5.0左边侧滑 + 动画

xml activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width=&quo

google 原生态 抽屉式侧滑菜单 Android DrawerLayout 布局的使用介绍

废话不多说,直接上效果图: 其实谷歌官方已经给出了一个 关于DrawerLayout 使用的例子,只是处于 国内不能访问谷歌官网,看不到详细文档说明,所以在此 简单记录下  侧滑 抽屉式菜单的使用说明 1.由于 DrawerLayout 需要 android.support.v4 包的支持,所以,你的libs 下面不要包含 这个包. 2.首先布局文件如下 <android.support.v4.widget.DrawerLayout xmlns:android="http://schema

[AndroidStudio]DrawerLayout布局结合HomeAsUp箭头动画效果最小系统

2019-12-27  20:44:40  WideMouth DrawerLayout布局结合HomeAsUp箭头动画效果最小系统 2019年12月27日,现在,终于解决了写下这篇博客的所有事情,之前一直纠结博客园无法上传视频,找了很多种方法,尝试上传B网站视频测试,查看博客时却无法显示,原来是园主设置了JS权限,申请了才能支持HTML代码,几个小时申请完后,发现上传的视频无法自动播放(尝试了网上的办法,还是没能解决,头疼),一小时前找到了完美的解决办法(GIF)哈哈,多么简单的办法,还真是难

安卓Design包之NavigationView结合DrawerLayout,toolbar的使用,FloatingActionButton

FloatingActionButton 悬浮按钮:FloatingActionButton是重写ImageView的,所有FloatingActionButton拥有ImageView的一切属性. app:backgroundTint - 设置FAB的背景颜色. app:rippleColor - 设置FAB点击时的背景颜色. app:borderWidth - 该属性尤为重要,如果不设置0dp,那么在4.1的sdk上FAB会显示为正方形,而且在5.0以后的sdk没有阴影效果.所以设置为bor

Android开发实战之补间动画和属性动画

说起动画,其实一点也不陌生,在使用一款app的时候为了优化用户体验,多多少少的,都会加入动画. 安卓中的动画,分为两大类:补间动画和属性动画.本篇博文会详细介绍总结这两大动画,希望本篇博文对你的学习和生活有所帮助. **补间动画** 补间动画分为四类:平移动画,旋转动画,缩放动画和渐变动画.这几类动画用法都差不多,只是对象参数不同这里我统一展示出来.以下是效果图: 实现代码很简单: btn1.setOnClickListener(new View.OnClickListener() { @Ove