下弹动画的实现

下弹动画在很多应用都有使用,比如豌豆荚中的应用介绍界面,百度手机助手的应用介绍界面等。

只要熟悉android动画的使用接口,制作动画并不困难。 这里使用开源库nineoldandroids,其实和android3.0 以上直接使用动画接口是一样的。

实现效果

具体可以看youku动画:http://v.youku.com/v_show/id_XNjYyODgzNjQ4.html

PS, 搞了半天GIF 才能播放。原来是最大边不能太大了。原来图片尺寸太大,被默认转成jpg了。现在总算能看到效果了。

DropDownExample.java

  1. package com.buptfarmer.devapp;
  2. import com.nineoldandroids.animation.Animator;
  3. import com.nineoldandroids.animation.AnimatorListenerAdapter;
  4. import com.nineoldandroids.animation.ValueAnimator;
  5. import android.app.Activity;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.view.ViewGroup;
  10. public class DropDownExample extends Activity implements OnClickListener {
  11. private View mHolder;
  12. private View mHolder2;
  13. //    private static final int DURATION = 2000;
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. initView();
  18. }
  19. private void initView() {
  20. setContentView(R.layout.drop_down_example);
  21. mHolder = findViewById(R.id.holder);
  22. mHolder2 = findViewById(R.id.holder2);
  23. mHolder.setOnClickListener(this);
  24. mHolder2.setOnClickListener(this);
  25. }
  26. public static ValueAnimator createHeightAnimator(final View view, int start, int end) {
  27. ValueAnimator animator = ValueAnimator.ofInt(start, end);
  28. animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
  29. @Override
  30. public void onAnimationUpdate(ValueAnimator valueAnimator) {
  31. int value = (Integer) valueAnimator.getAnimatedValue();
  32. ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
  33. layoutParams.height = value;
  34. view.setLayoutParams(layoutParams);
  35. }
  36. });
  37. //        animator.setDuration(DURATION);
  38. return animator;
  39. }
  40. public static void animateExpanding(final View view) {
  41. view.setVisibility(View.VISIBLE);
  42. final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
  43. final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
  44. view.measure(widthSpec, heightSpec);
  45. ValueAnimator animator = createHeightAnimator(view, 0, view.getMeasuredHeight());
  46. animator.start();
  47. }
  48. public static void animateCollapsing(final View view) {
  49. int origHeight = view.getHeight();
  50. ValueAnimator animator = createHeightAnimator(view, origHeight, 0);
  51. animator.addListener(new AnimatorListenerAdapter() {
  52. public void onAnimationEnd(Animator animation) {
  53. view.setVisibility(View.GONE);
  54. };
  55. });
  56. animator.start();
  57. }
  58. @Override
  59. public void onClick(View v) {
  60. if (v == mHolder) {
  61. if (View.GONE == mHolder.findViewById(R.id.hiddenview).getVisibility()) {
  62. animateExpanding(mHolder.findViewById(R.id.hiddenview));
  63. } else {
  64. animateCollapsing(mHolder.findViewById(R.id.hiddenview));
  65. }
  66. } else if (v == mHolder2) {
  67. if (View.GONE == mHolder2.findViewById(R.id.hiddenview).getVisibility()) {
  68. animateExpanding(mHolder2.findViewById(R.id.hiddenview));
  69. } else {
  70. animateCollapsing(mHolder2.findViewById(R.id.hiddenview));
  71. }
  72. }
  73. }
  74. }

drop_down_example.xml

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="match_parent"
    4. android:layout_height="match_parent"
    5. android:orientation="vertical" >
    6. <LinearLayout
    7. android:id="@+id/holder"
    8. android:layout_width="fill_parent"
    9. android:layout_height="wrap_content"
    10. android:background="@color/greenyellow"
    11. android:orientation="vertical" >
    12. <LinearLayout
    13. android:layout_width="fill_parent"
    14. android:layout_height="wrap_content"
    15. android:gravity="center_vertical"
    16. android:orientation="horizontal"
    17. android:paddingLeft="1dp" >
    18. <ImageView
    19. android:id="@+id/app_icon"
    20. android:layout_width="wrap_content"
    21. android:layout_height="wrap_content"
    22. android:layout_gravity="center"
    23. android:contentDescription="picture"
    24. android:minWidth="32dp"
    25. android:src="@drawable/ic_launcher" />
    26. <TextView
    27. android:id="@+id/app_label"
    28. android:layout_width="wrap_content"
    29. android:layout_height="wrap_content"
    30. android:layout_marginLeft="5dp"
    31. android:ellipsize="end"
    32. android:gravity="left"
    33. android:singleLine="true"
    34. android:text="what's your dream?"
    35. android:textSize="13sp" />
    36. </LinearLayout>
    37. <LinearLayout
    38. android:id="@+id/hiddenview"
    39. android:layout_width="fill_parent"
    40. android:layout_height="40dp"
    41. android:gravity="center_vertical"
    42. android:orientation="horizontal"
    43. android:paddingLeft="1dp"
    44. android:visibility="gone" >
    45. <TextView
    46. android:id="@+id/hidden_text"
    47. android:layout_width="wrap_content"
    48. android:layout_height="fill_parent"
    49. android:text="过个好年,马上有房" />
    50. </LinearLayout>
    51. </LinearLayout>
    52. <LinearLayout
    53. android:id="@+id/holder2"
    54. android:layout_width="fill_parent"
    55. android:layout_height="wrap_content"
    56. android:background="@color/blueviolet"
    57. android:orientation="vertical" >
    58. <LinearLayout
    59. android:layout_width="fill_parent"
    60. android:layout_height="wrap_content"
    61. android:gravity="center_vertical"
    62. android:orientation="horizontal"
    63. android:paddingLeft="1dp" >
    64. <ImageView
    65. android:id="@+id/app_icon"
    66. android:layout_width="wrap_content"
    67. android:layout_height="wrap_content"
    68. android:layout_gravity="center"
    69. android:contentDescription="picture"
    70. android:minWidth="32dp"
    71. android:src="@drawable/ic_launcher" />
    72. <TextView
    73. android:id="@+id/app_label"
    74. android:layout_width="wrap_content"
    75. android:layout_height="wrap_content"
    76. android:layout_marginLeft="5dp"
    77. android:ellipsize="end"
    78. android:gravity="left"
    79. android:singleLine="true"
    80. android:text="Self introduction"
    81. android:textSize="13sp" />
    82. </LinearLayout>
    83. <LinearLayout
    84. android:id="@+id/hiddenview"
    85. android:layout_width="fill_parent"
    86. android:layout_height="40dp"
    87. android:gravity="center_vertical"
    88. android:orientation="horizontal"
    89. android:paddingLeft="1dp"
    90. android:visibility="gone" >
    91. <ImageView
    92. android:contentDescription="avatar"
    93. android:src="@drawable/avatar"
    94. android:layout_width="wrap_content"
    95. android:layout_height="wrap_content"
    96. android:layout_gravity="center"/>
    97. <TextView
    98. android:id="@+id/hidden_text"
    99. android:layout_width="wrap_content"
    100. android:layout_height="fill_parent"
    101. android:text="乐山好事,积极乐观" />
    102. </LinearLayout>
    103. </LinearLayout>
    104. </LinearLayout>

android 点击下弹动画实现的更多相关文章

  1. android 点击edittext弹出软键盘,否则不弹

    只需要加android:windowSoftInputMode="stateHidden|stateAlwaysHidden"就可以 如:<activity android: ...

  2. Android 使用动画效果后的控件位置处理 类似系统通知栏下拉动画

    Android的动画的使用,请参考.Android的动画,在设计方面,我有点不太理解,觉得这样搞很怪,因为在控件动画后,即使设置了停留在动画结束时的位置,我们也确实看到了控件停在那个位置,但其实该控件 ...

  3. easyui combobox点击输入框弹出下拉框

    由于easyui combobox需要点击下拉箭头才能下拉,不能像select标签那样点击输入框就下拉,所以觉得不太方便,查看了一下,combobox弹出框是一个div,原本想在他的输入框的点击事件中 ...

  4. Android下常见动画

    摘要:Android中常见的的动画有三种:属性动画.补间动画.帧动画. 注.因为前两种内容较多,后补 一.属性动画 二.补间动画 三.帧动画:本质是将一些连贯的图片加载形成连贯的动画效果 1.在Dra ...

  5. Android定位&地图&导航——基于百度地图,实现自定义图标绘制并点击时弹出泡泡

    一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...

  6. Android PullToRrefresh 自定义下拉刷新动画 (listview、scrollview等)

    PullToRefreshScrollView 自定义下拉刷新动画,只需改一处. 以下部分转载自http://blog.csdn.net/superjunjin/article/details/450 ...

  7. android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动

    android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动            1.先简单设置一个闹钟提醒事件: //设置闹钟 mSetting.setOnClickListener ...

  8. 有序无序Ul->Li Ol->Li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单(变形2 ---修饰)

    从上面可以看出,两个问题,第一:下拉出现的太快太突然,第二:再点击下一个下拉菜单的时候,上一个不会闭合,针对这两个问题,接下来会一 一解决. 解决下拉太快: js中有个jquery效果,有一个效果是j ...

  9. 有序无序ul->li ol->li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单

    实现这一效果利用css和js技术结合 以ul->li为例子 <!DOCTYPE html><html lang="en"><head> & ...

随机推荐

  1. 关于C语言中结构体中的结构体成员导致的字节对齐问题

    关于结构体的字节对齐是什么,就不赘述,再此附上一篇文章,介绍字节对齐:http://www.linuxsong.org/2010/09/c-byte-alignment/ 这里的结构体字节对齐的数据类 ...

  2. cocos2d-x -------之笔记篇 3D动作说明

    CCShaky3D::create(时间,晃动网格大小,晃动范围,Z轴是否晃动);    //创建一个3D晃动的效果 CCShakyTiles3D::create(时间,晃动网格大小,晃动范围,Z轴是 ...

  3. 【Windows 8 Store App】学习二:ResourceLoader

    原文 http://www.cnblogs.com/java-koma/archive/2013/05/22/3093308.html 在项目开发时,通常有一些资源信息需要存储起来,比如请求的URL, ...

  4. js中的刷新方法

    刷新并清除缓存: location.reload(true); 返回上一页并刷新: history.go(-1); location.reload(true); 子页面刷新父页面: self.open ...

  5. Fibonacci(数论 输出前四位Fibonacci)

    Fibonacci Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. Python之美[从菜鸟到高手]--生成器之全景分析

    yield指令,可以暂停一个函数并返回中间结果.使用该指令的函数将保存执行环境,并且在必要时恢复. 生成器比迭代器更加强大也更加复杂,需要花点功夫好好理解贯通. 看下面一段代码: def gen(): ...

  7. Kali linux安装漏洞扫描工具Nessus指南

    引子:Nessus是著名信息安全服务公司tenable推出的一款漏洞扫描与分析软件,号称是"世界上最流行的漏洞扫描程序,全世界超过75,000个组织在使用它".虽然这个扫描程序能够 ...

  8. Spring——jar包详解

    org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spring 2.5.6的时候需要a ...

  9. [转] C#.Net Socket网络通讯编程总结

    1.理解socket1).Socket接口是TCP/IP网络的应用程序接口(API).Socket接口定义了许多函数和例程,程序员可以用它们来开发TCP/IP网络应用程序.Socket可以看成是网络通 ...

  10. oracle 导入txt

    没有Oraclehoume的情况下,执行下环境变量文件 sqlldr userid= DM/DM control = /home/oracle/libc/load.ctl load data infi ...