android 点击下弹动画实现
下弹动画的实现
下弹动画在很多应用都有使用,比如豌豆荚中的应用介绍界面,百度手机助手的应用介绍界面等。
只要熟悉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;
- // private static final int DURATION = 2000;
- @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);
- }
- });
- // animator.setDuration(DURATION);
- 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
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <LinearLayout
- android:id="@+id/holder"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@color/greenyellow"
- android:orientation="vertical" >
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:orientation="horizontal"
- android:paddingLeft="1dp" >
- <ImageView
- android:id="@+id/app_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:contentDescription="picture"
- android:minWidth="32dp"
- android:src="@drawable/ic_launcher" />
- <TextView
- android:id="@+id/app_label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dp"
- android:ellipsize="end"
- android:gravity="left"
- android:singleLine="true"
- android:text="what's your dream?"
- android:textSize="13sp" />
- </LinearLayout>
- <LinearLayout
- android:id="@+id/hiddenview"
- android:layout_width="fill_parent"
- android:layout_height="40dp"
- android:gravity="center_vertical"
- android:orientation="horizontal"
- android:paddingLeft="1dp"
- android:visibility="gone" >
- <TextView
- android:id="@+id/hidden_text"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:text="过个好年,马上有房" />
- </LinearLayout>
- </LinearLayout>
- <LinearLayout
- android:id="@+id/holder2"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@color/blueviolet"
- android:orientation="vertical" >
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:orientation="horizontal"
- android:paddingLeft="1dp" >
- <ImageView
- android:id="@+id/app_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:contentDescription="picture"
- android:minWidth="32dp"
- android:src="@drawable/ic_launcher" />
- <TextView
- android:id="@+id/app_label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dp"
- android:ellipsize="end"
- android:gravity="left"
- android:singleLine="true"
- android:text="Self introduction"
- android:textSize="13sp" />
- </LinearLayout>
- <LinearLayout
- android:id="@+id/hiddenview"
- android:layout_width="fill_parent"
- android:layout_height="40dp"
- android:gravity="center_vertical"
- android:orientation="horizontal"
- android:paddingLeft="1dp"
- android:visibility="gone" >
- <ImageView
- android:contentDescription="avatar"
- android:src="@drawable/avatar"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"/>
- <TextView
- android:id="@+id/hidden_text"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:text="乐山好事,积极乐观" />
- </LinearLayout>
- </LinearLayout>
- </LinearLayout>
android 点击下弹动画实现的更多相关文章
- android 点击edittext弹出软键盘,否则不弹
只需要加android:windowSoftInputMode="stateHidden|stateAlwaysHidden"就可以 如:<activity android: ...
- Android 使用动画效果后的控件位置处理 类似系统通知栏下拉动画
Android的动画的使用,请参考.Android的动画,在设计方面,我有点不太理解,觉得这样搞很怪,因为在控件动画后,即使设置了停留在动画结束时的位置,我们也确实看到了控件停在那个位置,但其实该控件 ...
- easyui combobox点击输入框弹出下拉框
由于easyui combobox需要点击下拉箭头才能下拉,不能像select标签那样点击输入框就下拉,所以觉得不太方便,查看了一下,combobox弹出框是一个div,原本想在他的输入框的点击事件中 ...
- Android下常见动画
摘要:Android中常见的的动画有三种:属性动画.补间动画.帧动画. 注.因为前两种内容较多,后补 一.属性动画 二.补间动画 三.帧动画:本质是将一些连贯的图片加载形成连贯的动画效果 1.在Dra ...
- Android定位&地图&导航——基于百度地图,实现自定义图标绘制并点击时弹出泡泡
一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...
- Android PullToRrefresh 自定义下拉刷新动画 (listview、scrollview等)
PullToRefreshScrollView 自定义下拉刷新动画,只需改一处. 以下部分转载自http://blog.csdn.net/superjunjin/article/details/450 ...
- android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动
android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动 1.先简单设置一个闹钟提醒事件: //设置闹钟 mSetting.setOnClickListener ...
- 有序无序Ul->Li Ol->Li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单(变形2 ---修饰)
从上面可以看出,两个问题,第一:下拉出现的太快太突然,第二:再点击下一个下拉菜单的时候,上一个不会闭合,针对这两个问题,接下来会一 一解决. 解决下拉太快: js中有个jquery效果,有一个效果是j ...
- 有序无序ul->li ol->li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单
实现这一效果利用css和js技术结合 以ul->li为例子 <!DOCTYPE html><html lang="en"><head> & ...
随机推荐
- vb sqlite 使用 litex
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal ...
- Unix/Linux环境C编程入门教程(1) Solaris 11 64bit环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 本文就带大家来安装Solaris 11 64位并且配置好C/C++开发环境 本文所 ...
- javascript中的继承方法
从Javascript面向对象编程(二):构造函数的继承这里,可以看到详细的说明. 我只是将其中的例子做成html文件,便于调试罢了. 1. 构造函数绑定 <html> <head& ...
- sql优化-总结
1.尽量缩小数据范围. 2.能一个sql解决的,坚决不用两条sql.利用case when或decode. select month_id, corppkno, sum(exportSum_new) ...
- html中文乱码
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">改成<m ...
- 关于java同步包中ConcurrentLinkedQueue类的深入分析与理解
一,官方描写叙述 一个基于连接节点的无界线程安全队列.这个队列的顺序是先进先出.队列头部的元素是留在队列中时间最长的,队列尾部的元素是留在队列中时间最短的.新元素被插入到元素的尾部,队列从队列的头部检 ...
- sql server dateadd()
定义和用法 DATEADD() 函数在日期中添加或减去指定的时间间隔. 语法 DATEADD(datepart,number,date) date 参数是合法的日期表达式.number 是您希望添加的 ...
- su Authentication failure解决
su Authentication failure解决 关于Ubuntu桌面系统su root时认证失败的问题 1. Ubuntu 默认没有给root用户设置密码,当我们su root命令时, 提示认 ...
- NET,ASP.NET,C#,WinFrom之间的联系与区别
1:C#是编程语言(静态,强类型).类似中文.德文.英文这样. 2:.NET是一个平台(可承载多个编程语言,比如C# C++.net J# VB.Net), 但是都是运行在.net Fra ...
- 在工作空间中构建和使用catkin包
在这篇博客中将会介绍,如何在工作空间中构建和使用一个包. 首先,我们来看一下如何在catkin工作空间中,使用catkin_make工具从源文件构建和安装一个包.使用catkin_make来构建一个c ...