Android属性动画之实现布局的下拉展开

前段时间,我们做了一下Android的几个动画(http://blog.csdn.net/qq_25193681/article/details/51777248),对Android的补间动画有了一定的了解。但是在Android的3.0之后,google又提出了属性动画的这样一个框架,他可以更好的帮助我们实现更丰富的动画效果。所以为了跟上技术的步伐,今天就聊一聊属性动画。

这一次的需求是这样的:当点击一个View的时候,显示下面隐藏的一个View,要实现这个功能,需要将V iew的visibility属性设置gone为visible即可,但是这个过程是一瞬间的,并不能实现我们要的效果。所以,属性动画是个不错的方案。

先把效果贴上 

第一个:

 

第二个:

 

前面的这个是隐藏着,后面这个是显示的。当点击这个箭头的时候,来切换显示或者隐藏,

现在开始编码:

布局文件如下

 =
    =
    =
    =
    =
    = >

            =
        =
        =
        = >

                    =
            =
            =
            =
            =
            =
            = />
    >

            =
        =
        =
        =
        = >

                    =
            =
            =
            =
            =
            = />

                    =
            =
            =
            =
            = />
    >

            =
        =
        =
        =
        =
        = >

                    =
            =
            =
            =
            =
            = />

                    =
            =
            =
            =
            = />
    >

            =
        =
        =
        =
        =
        = >

                    =
            =
            =
            =
            = />
    >

>

这里面代码并不多,也很简单,三个线性布局,里面装载着各自的控件,并且还设置了ID。按钮是一个线性布局,采用了onClick自身的点击事件。接下来,当点击了这个线性布局的时候,需要隐藏的控件最终到达一个高度,这个就是我们的目标值,只需要通过布局中的dp转换成像素就行了。


 + );

这里是120就是我们布局里面定义的高度。

然后给这个过程增加一个动画效果。

    ValueAnimator animator = ValueAnimator.ofInt(start, end);
        animator.addUpdateListener( AnimatorUpdateListener() {

            @Override
              (ValueAnimator arg0) {
                  = () arg0.getAnimatedValue();
                ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
                layoutParams.height = ;
                v.setLayoutParams(layoutParams);

            }
        });

通过这样一个简单的ValueAnimator ,就可以很方便的实现显示和隐藏的动画效果了。 

下面是完整的代码。

 android.animation.Animator;
 android.animation.AnimatorListenerAdapter;
 android.animation.ValueAnimator;
 android.animation.ValueAnimator.AnimatorUpdateListener;
 android.os.Bundle;
 android.support.v7.app.ActionBarActivity;
 android.view.View;
 android.view.ViewGroup;
 android.view.Window;
 android.view.animation.Animation;
 android.view.animation.RotateAnimation;
 android.widget.ImageView;
 android.widget.LinearLayout;

     {
     LinearLayout mHiddenLayout;

      mDensity;

      mHiddenViewMeasuredHeight;

     ImageView mIv;

      (Bundle savedInstanceState) {
        .onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        //URL:http://www.bianceng.cn/OS/extra/201608/50381.htm
        mHiddenLayout = (LinearLayout) findViewById(R.id.linear_hidden);
        mIv = (ImageView) findViewById(R.id.my_iv);

        mDensity = getResources().getDisplayMetrics().density;

        mHiddenViewMeasuredHeight = () (mDensity *  + );

    }

      (View v) {
         (mHiddenLayout.getVisibility() == View.GONE) {
            animateOpen(mHiddenLayout);
            animationIvOpen();
        }  {
            animateClose(mHiddenLayout);
            animationIvClose();
        }
    }

      (View v) {
        v.setVisibility(View.VISIBLE);
        ValueAnimator animator = createDropAnimator(v, ,
                mHiddenViewMeasuredHeight);
        animator.start();

    }

      () {
        RotateAnimation animation =  RotateAnimation(, ,
                Animation.RELATIVE_TO_SELF, f, Animation.RELATIVE_TO_SELF,
                f);
        animation.setFillAfter();
        animation.setDuration();
        mIv.startAnimation(animation);
    }

      () {
        RotateAnimation animation =  RotateAnimation(, ,
                Animation.RELATIVE_TO_SELF, f, Animation.RELATIVE_TO_SELF,
                f);
        animation.setFillAfter();
        animation.setDuration();
        mIv.startAnimation(animation);
    }

      ( View view) {
         origHeight = view.getHeight();
        ValueAnimator animator = createDropAnimator(view, origHeight, );
        animator.addListener( AnimatorListenerAdapter() {

              (Animator animation) {
                view.setVisibility(View.GONE);
            }

        });
        animator.start();
    }

     ValueAnimator ( View v,  start,  end) {
        ValueAnimator animator = ValueAnimator.ofInt(start, end);
        animator.addUpdateListener( AnimatorUpdateListener() {

              (ValueAnimator arg0) {
                 value = () arg0.getAnimatedValue();
                ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
                layoutParams.height = value;
                v.setLayoutParams(layoutParams);

            }
        });
         animator;
    }

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 布局
, view
, linearlayout动态布局
, 动画
, animate
, android时间显示
, animation
, android 布局
, android布局的实现
, layoutparams
, android 动画效果
, 自定义 iew
, iew lipper
ecycler iew
css3 下拉展开 动画、android 下拉展开动画、ios 实现展开动画效果、select下拉框展开事件、android 布局展开收起,以便于您获取更多的相关知识。

时间: 2024-10-18 06:53:47

Android属性动画之实现布局的下拉展开的相关文章

Android属性动画实现布局的下拉展开效果_Android

在Android的3.0之后,google又提出了属性动画的这样一个框架,他可以更好的帮助我们实现更丰富的动画效果.所以为了跟上技术的步伐,今天就聊一聊属性动画. 这一次的需求是这样的:当点击一个View的时候,显示下面隐藏的一个View,要实现这个功能,需要将V iew的visibility属性设置gone为visible即可,但是这个过程是一瞬间的,并不能实现我们要的效果.所以,属性动画是个不错的方案. 先把效果贴上 第一个:  第二个: 前面的这个是隐藏着,后面这个是显示的.当点击这个箭头

Android属性动画实现布局的下拉展开效果

在Android的3.0之后,google又提出了属性动画的这样一个框架,他可以更好的帮助我们实现更丰富的动画效果.所以为了跟上技术的步伐,今天就聊一聊属性动画. 这一次的需求是这样的:当点击一个View的时候,显示下面隐藏的一个View,要实现这个功能,需要将V iew的visibility属性设置gone为visible即可,但是这个过程是一瞬间的,并不能实现我们要的效果.所以,属性动画是个不错的方案. 先把效果贴上 第一个: 第二个: 前面的这个是隐藏着,后面这个是显示的.当点击这个箭头的

Android属性动画完全解析(下) Interpolator和ViewPropertyAnimator的用法

大家好,欢迎继续回到Android属性动画完全解析.在上一篇文章当中我们学习了属性动画的一些进阶技巧,包括ValueAnimator和ObjectAnimator的高级用法,那么除了这些之外,当然还有一些其它的高级技巧在等着我们学习,因此本篇文章就对整个属性动画完全解析系列收个尾,来学习一下剩下的非常重要的高级技巧. 另外,本篇文章中使用的代码是建立在上篇文章基础之上的,如果你还没有阅读过前面的文章,建议先去参考阅读一下 Android属性动画完全解析(中),ValueAnimator和Obje

Android技术进阶的要素之Android属性动画

由于Android3.0之前就有了许多的动画框架,其中之一就是Animation,但是随着时代的发展和交互要求的提高,Animation的局限性也越来越明显,例如:Anmiation动画不能响应点击事件等等.因此,在Android3.0之后,Google推出了新的动画框架--属性动画(Animator). 而在Animator框架中使用最多的就是AnimatorSet和ObjectAnimator的配合,使用ObjectAnimator进行更加精细化的控制,只控制一个对象的一个属性值,而使用多个

Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了很大幅度的改进,之前补间动画可以做到的属性动画也能做到,补间动画做不到的现在属性动画也可以做到了.因此,今天我们就来学习一下属性动画的高级用法,看看如何实现一些补间动画

android属性动画

1.概述 Android提供了几种动画类型:View Animation .Drawable Animation .Property Animation .View Animation相当简单,不过只能支持简单的缩放.平移.旋转.透明度基本的动画,且有一定的局限性.比如:你希望View有一个颜色的切换动画:你希望可以使用3D旋转动画:你希望当动画停止时,View的位置就是当前的位置:这些View Animation都无法做到.这就是Property Animation产生的原因,本篇博客详细介绍

Android属性动画之实现灵动菜单效果

前段时间,我学习了自定义View,基本能够绘制一些比较好看的控件,那么今天开始,我将会学习属性动画.前面我也简单的看过属性动画的概念,然后也是看了一下效果,了解了一些基本概念,比如Animator.ObjectAnimator.插值器等等.为此我还特意写了博客Android技术进阶的要素--Android属性动画,但是没有一个项目去巩固,也一直耿耿于怀,今天终于可以开始写这方面的程序了,好了,讲了这么多的废话,下面开始看看今天的内容,我是通过demo来了解属性动画的.先看你效果: 这个就是展开后

图文详解Android属性动画_Android

 Android中的动画分为视图动画(View Animation).属性动画(Property Animation)以及Drawable动画.从Android 3.0(API Level 11)开始,Android开始支持属性动画,本文主要讲解如何使用属性动画.关于视图动画可以参见博文<Android四大视图动画图文详解>. 一.概述 视图动画局限比较大,如下所述: 1.视图动画只能使用在View上面. 2.视图动画并没有真正改变View相应的属性值,这导致了UI效果与实际View状态存在差

Android仿网易一元夺宝客户端下拉加载动画效果(一)_Android

上上周写的一个demo,仿照网易一元夺宝的下拉刷新效果. 原效果是(第一部分)一个小太阳拉下来,然后松开回弹上去, (第二部分)再掉下来一个硬币进行中轴旋转. 本文实现的效果的是第一部分的,效果演示图如下: Gif图看起来比较卡顿...其实真机演示效果还是很流畅的. 下面分析实现过程: 当时因为时间有限没有写在下拉刷新的组件中,也没有封装成一个单独的组件,只是在主布局后面写了一个View然后实现相应的操作,进行封装并不难,这里就不花时间BB了,下面是布局文件: <RelativeLayout x