animation of android (1)
android把动画的模式分为:property animation,view animation,drawable animation.
view animation:给出动画的起止状态,并且通过一定的方式来是view动起来。这个动画只能用于view。
帧动画:是给出一组图片,有drawable来展示动画变化过程。
1.tweened animation
layout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".AnimationActivity" > <ImageView
android:id="@+id/animation_img"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_centerInParent="true"
android:src="@drawable/icon_follower" /> <LinearLayout
android:id="@+id/action_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal" > <Button
android:id="@+id/btn_alphaanimation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="@string/alpha_animation" /> <Button
android:id="@+id/btn_rotateanimation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="@string/rotate_animation" /> <Button
android:id="@+id/btn_scaleanimation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="@string/scale_animation" />
<Button
android:id="@+id/btn_translationanimation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="@string/scale_animation" />
</LinearLayout> </RelativeLayout>
activity:
package com.joyfulmath.animatatorsamples; import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.BounceInterpolator;
import android.view.animation.LinearInterpolator;
import android.view.animation.OvershootInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView; public class AnimationActivity extends Activity implements OnClickListener{ private static final String TAG = "animatatorsamples";
Button mAlphaAnimation = null;
Button mRotateAnimation = null;
Button mScaleAnimation = null;
Button mTranslationAnimation = null;
ImageView mImage = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_animation_main);
mAlphaAnimation = (Button) this.findViewById(R.id.btn_alphaanimation);
mAlphaAnimation.setOnClickListener(this);
mRotateAnimation = (Button) this.findViewById(R.id.btn_rotateanimation);
mRotateAnimation.setOnClickListener(this); mScaleAnimation = (Button) this.findViewById(R.id.btn_scaleanimation);
mScaleAnimation.setOnClickListener(this); mTranslationAnimation = (Button) this.findViewById(R.id.btn_translationanimation);
mTranslationAnimation.setOnClickListener(this); mImage = (ImageView) this.findViewById(R.id.animation_img);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.animation, menu);
return true;
} @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.btn_alphaanimation:
startAlphaAnimation();
break;
case R.id.btn_rotateanimation:
startRotateAnimation();
break;
case R.id.btn_scaleanimation:
startScaleAnimation();
break;
case R.id.btn_translationanimation:
startThanslationAnimation();
break;
}
} private void startRotateAnimation() {
Log.i(TAG, "[startRotateAnimation]");
//Animation.RELATIVE_TO_SELF the center of rotate
Animation rotateaAni = new RotateAnimation(0f, 360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
rotateaAni.setDuration(3000);
rotateaAni.setFillAfter(true);
rotateaAni.setInterpolator(new LinearInterpolator());
mImage.startAnimation(rotateaAni); } private void startAlphaAnimation() {
Log.i(TAG, "[startAlphaAnimation]");
AlphaAnimation alphaAni = new AlphaAnimation(1.0f, 0.5f);
alphaAni.setDuration(3000);
alphaAni.setFillAfter(true);
alphaAni.setInterpolator(new OvershootInterpolator());
alphaAni.setAnimationListener(new AnimationListener() { @Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "[onAnimationStart]");
} @Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "[onAnimationRepeat]");
} @Override
public void onAnimationEnd(Animation arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "[onAnimationEnd]");
}
}); mImage.startAnimation(alphaAni);
} private void startScaleAnimation()
{
float fromX; //1.0f to 0.0f
float toX;
float fromY;
float toY;
int pivotXType; //where is the last place after scale
float pivotXValue;
int pivotYType;
float pivotYValue;
//Animation.ABSOLUTE, //the last place with X ordinate with absolute diff 20f
//Animation.RELATIVE_TO_SELF, //specified dimension to self
//Animation.RELATIVE_TO_PARENT. //specified dimension to parent move 100%=1f with diff (%parent diff)
ScaleAnimation scaleAnim = new ScaleAnimation(1.0f, 0.5f, 1.0f, 0.5f
// ,Animation.ABSOLUTE, 20f, Animation.RELATIVE_TO_PARENT,
// 2f
);
//ScaleAnimation(float fromX, float toX, float fromY, float toY) 绫讳技Animation.ABSOLUTE,涓攛,y =0;
scaleAnim.setDuration(3000);
scaleAnim.setFillAfter(true);
scaleAnim.setInterpolator(new OvershootInterpolator());
mImage.startAnimation(scaleAnim); } private void startThanslationAnimation()
{
Log.i(TAG, "[startThanslationAnimation]");
//Animation.ABSOLUTE where is the last point show place
//the start x,y ordinate is the current place with translation
TranslateAnimation anmit= new TranslateAnimation(Animation.RELATIVE_TO_PARENT,0.1f,Animation.RELATIVE_TO_PARENT,0.5f,
Animation.RELATIVE_TO_PARENT,0.2f,Animation.RELATIVE_TO_PARENT, 0.6f);
anmit.setDuration(3000);
anmit.setFillAfter(true);
anmit.setInterpolator(new BounceInterpolator());
mImage.startAnimation(anmit);
} }
animation 是一种变换动画,也就是实际的响应位置和大小并没有变化,只是视图上的变换。
这种动画变换成本低,效率高。
这些类都继承自android.view.animation.Animation
2.animationset
view视图动画组合只用是一个view对象的多种状态变换。
/**
* Constructor to use when building an AnimationSet from code
*
* @param shareInterpolator Pass true if all of the animations in this set
* should use the interpolator associated with this AnimationSet.
* Pass false if each animation should use its own interpolator.
*/
public AnimationSet(boolean shareInterpolator) {
setFlag(PROPERTY_SHARE_INTERPOLATOR_MASK, shareInterpolator);
init();
}
如androidsdk源码所示,shareInterpolator将决定使用每个animation的interpolator
还是animationset的变换方式。
animationset的变换只能一起播放,只有通过startoffset的方式可以模拟变换的顺序。
3.android.view.animation.BaseInterpolator
变换方式:
末前支持的是:
AccelerateDecelerateInterpolator, 开始和结束变换慢,中间变换快速
AccelerateInterpolator, 开始缓慢,然后加速
AnticipateInterpolator, 变换会有一个回调,也就是先向后变换,然后按照给定关键帧的方式变换。
AnticipateOvershootInterpolator, An interpolator where the change starts backward then flings forward and overshoots the target value and finally goes back to the final value
BounceInterpolator, 贝叶斯曲线
CycleInterpolator, sin曲线
DecelerateInterpolator, 减速变化
LinearInterpolator, 默认,线性变换
OvershootInterpolator, An interpolator where the change flings forward and overshoots the last value then comes back.
PathInterpolator 5.1新功能。可以自定义变换路径方式。
animation of android (1)的更多相关文章
- animation of android (2)
android Interpolator 首先是android系统提供的变换方式: 这些方式将转载一篇文章: 转: http://www.cnblogs.com/mengdd/p/3346003.ht ...
- animation of android (3)
视图动画,只有view可以使用. 在android3.0以后,属性动画. ValueAnimation 可以记录属性变化的过程,所以他的对象是任何object. 所以ValueAnimation 的真 ...
- animation of android (4)
TimeAnimator: 与objectAminator不同,它反馈的时间间隔.也就是说TimeAnimator不产生实际的动画效果,他反馈的时间间隔和时间值. 而你并不关心 interpolate ...
- Android Animation动画实战(二):从屏幕底部弹出PopupWindow
在这篇文章之前,我已经陆陆续续写了几篇博客,介绍了Android Animation是如何使用的,有还不明白的,可以点击查看: 1. Android Animation动画详解(一): 补间动画 2. ...
- Android(java)学习笔记207:开源项目使用之gif view
1. 由于android没有自带的gif动画,我在Android(java)学习笔记198:Android下的帧动画(Drawable Animation) 播客中提到可以使用AnimationVie ...
- Android(java)学习笔记150:开源项目使用之gif view
1. 由于android没有自带的gif动画,我在Android(java)学习笔记198:Android下的帧动画(Drawable Animation) 播客中提到可以使用AnimationVie ...
- [Android]使用Kotlin开发Android(二)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4829007.html [TOC] 使用Kotlin+OkHtt ...
- Android(java)学习笔记267:Android线程池形态
1. 线程池简介 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...
- Android(java)学习笔记71:生产者和消费者之等待唤醒机制
1. 首先我们根据梳理我们之前Android(java)学习笔记70中关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 pac ...
随机推荐
- IP Failover Setup using Keepalived on CentOS/Redhat 6
source url:http://tecadmin.net/ip-failover-setup-using-keepalived-on-centos-redhat-6/ Keepalived is ...
- Breach - HTML5 时代,基于 JS 编写的浏览器
Breach 是一款属于 HTML5 时代的开源浏览器项目,,完全用 Javascript 编写的.免费.模块化.易于扩展.这个浏览器中的一切都是模块,Web 应用程序在其自己的进程运行.通过选择合适 ...
- 实用手册:130+ 提高开发效率的 vim 常用命令
Vim 是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器.这里收录了130+程 ...
- [git]解决:git config --global push.default matching
解决:git config --global push.default matching 这个警告的意思是:需要设置默认push的分支,所以设置好全局push的默认分支就好了.命令如下: 在有git目 ...
- [git]git忽略文件
可以通过创建~/.gitignore_global并添加到git全局配置以减少每层目录的规则重复定义.使用命令git config --global core.excludesfile ~/.giti ...
- Hadoop下面WordCount运行详解
单词计数是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce版"Hello World",该程序的完整代码可以在Hadoop安装包的"src/ ...
- 【Spark】---- 在Linux集群上安装和配置Spark
1 安装JDK 1) 进入JDK官网 2) 下载JDK安装包 3)配置环境变量,在/etc/profile增加以下代码 JAVA_HOME=/home/hadoop/jdk1.6.0_38 PAT ...
- 文本对象模型(Document Object Model)
本文内容: 1. 概述 2. DOM中的节点类型 3. DOM节点的选取 4. 存取元素属性 5.DOM元素的增删 6.小结 ★ 概述 文本对象模型(DOM)是一个能够让程序和脚本动态访问和更新文档内 ...
- Java的final关键字详解
Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...
- 【C++】第1章 在VS2015中用C++编写控制台应用程序
分类:C++.VS2015 创建日期:2016-06-12 一.简介 看到不少人至今还在用VC 6.0开发工具学习C++,其实VC 6.0开发工具早就被淘汰了.这里仅介绍学习C++时推荐使用的两种开发 ...