下弹动画的实现
下弹动画在很多应用都有使用,比如豌豆荚中的应用介绍界面,百度手机助手的应用介绍界面等。
只要熟悉android动画的使用接口,制作动画并不困难。 这里使用开源库nineoldandroids,其实和android3.0 以上直接使用动画接口是一样的。
实现效果
具体可以看youku动画:http://v.youku.com/v_show/id_XNjYyODgzNjQ4.html
PS, 搞了半天GIF 才能播放。原来是最大边不能太大了。原来图片尺寸太大,被默认转成jpg了。现在总算能看到效果了。

DropDownExample.java
- package com.buptfarmer.devapp;
-
- import com.nineoldandroids.animation.Animator;
- import com.nineoldandroids.animation.AnimatorListenerAdapter;
- import com.nineoldandroids.animation.ValueAnimator;
-
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.ViewGroup;
-
- public class DropDownExample extends Activity implements OnClickListener {
- private View mHolder;
- private View mHolder2;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- initView();
- }
-
- private void initView() {
- setContentView(R.layout.drop_down_example);
- mHolder = findViewById(R.id.holder);
- mHolder2 = findViewById(R.id.holder2);
- mHolder.setOnClickListener(this);
- mHolder2.setOnClickListener(this);
- }
-
- public static ValueAnimator createHeightAnimator(final View view, int start, int end) {
- ValueAnimator animator = ValueAnimator.ofInt(start, end);
- animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-
- @Override
- public void onAnimationUpdate(ValueAnimator valueAnimator) {
- int value = (Integer) valueAnimator.getAnimatedValue();
-
- ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
- layoutParams.height = value;
- view.setLayoutParams(layoutParams);
- }
- });
- return animator;
- }
-
- public static void animateExpanding(final View view) {
- view.setVisibility(View.VISIBLE);
-
- final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
- final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
- view.measure(widthSpec, heightSpec);
-
- ValueAnimator animator = createHeightAnimator(view, 0, view.getMeasuredHeight());
- animator.start();
- }
-
- public static void animateCollapsing(final View view) {
- int origHeight = view.getHeight();
-
- ValueAnimator animator = createHeightAnimator(view, origHeight, 0);
- animator.addListener(new AnimatorListenerAdapter() {
- public void onAnimationEnd(Animator animation) {
- view.setVisibility(View.GONE);
- };
- });
- animator.start();
- }
-
- @Override
- public void onClick(View v) {
- if (v == mHolder) {
- if (View.GONE == mHolder.findViewById(R.id.hiddenview).getVisibility()) {
- animateExpanding(mHolder.findViewById(R.id.hiddenview));
- } else {
- animateCollapsing(mHolder.findViewById(R.id.hiddenview));
- }
- } else if (v == mHolder2) {
- if (View.GONE == mHolder2.findViewById(R.id.hiddenview).getVisibility()) {
- animateExpanding(mHolder2.findViewById(R.id.hiddenview));
- } else {
- animateCollapsing(mHolder2.findViewById(R.id.hiddenview));
- }
- }
- }
- }
drop_down_example.xml
android 点击下弹动画实现
原文:http://www.cnblogs.com/Free-Thinker/p/4379973.html