下弹动画的实现

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

只要熟悉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. jquery判断图片是否加载完毕

    来源: <http://www.2cto.com/kf/201409/331234.html> 利用图片没有加载完成的时候,宽高为0.我们很容易判断图片的一个加载情况.如下: 思路:判断图 ...

  2. CentOS下Mysql安装调试

    一.安装   yum安装:yum install -y mysql-server mysql mysql-devel 设置自启动:chkconfig mysqld on 启动MySQL:service ...

  3. git/github 笔记

    2016-1-9 创建github repos并提交修改 在[这里](https://github.com/new)创建一个repos, 进入终端,cd到一个目录下,这个目录用来放等下clone的工程 ...

  4. 1.org.hibernate.MappingException: No Dialect mapping for JDBC type: -9

    org.hibernate.MappingException: No Dialect mapping for JDBC type: -9 原因:Hibernate框架的方言(Dialect )没有数据 ...

  5. C#版-百度网盘API的实现(一)

    在这篇文章中,楼主将会给大家介绍一下,通过C# winform程序在后台模拟用户登陆百度网盘的基本思路 首先了解下模拟登陆的流程,如下: 一,访问http://www.baidu.com网站,获取BA ...

  6. Umbraco扩展开发

    国内Umbraco方面的资料很少,搜集到一些国外的优秀项目或插件.记录下来,便于日后使用: backoffice:https://github.com/TimGeyssens 后台扩展UI,可以在这里 ...

  7. opennebula kvm attach disk

    openNebula hotPlug disk or nic 网络检索关键字(Network search keywords) 208.117.233.122 virsh attach disk vi ...

  8. openNebula 运维系列虚拟机virtual machines operations

    1,virtual machine manage,VMInstance state; http://docs.opennebula.org/4.4/user/virtual_resource_mana ...

  9. Android 开发ListView适配器优化

    我们都知道Android中Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View.想过没有? 在我们的列 ...

  10. zoj 3665 Yukari's Birthday(枚举+二分)

    Yukari's Birthday Time Limit: 2 Seconds       Memory Limit: 32768 KB Today is Yukari's n-th birthday ...