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 ...
随机推荐
- 《HelloGitHub月刊》第02期
<HelloGithub>第02期 兴趣是最好的老师,而<HelloGitHub> 就是帮你找到兴趣! 因为我比较熟悉python语言,所以月刊中python语言的项目居多,个 ...
- Blocked Process Report
当同个对象上有互斥的锁存在时,查询需要等待很长时间,我们是否可以收到来自SQL Server提醒?答案是可以的,做法非常简单,因为SQL Server为你提供了称为Blocked Process Re ...
- struts2重点——ValueStack和OGNL
一.值栈(ValueStack) 1.实现类:OGNLValueStack 2.对象栈:CompoundRoot(针对的是类级别的) (1)继承自 ArrayList —— 先进后出 (2)提供了栈的 ...
- 组合数学 - 波利亚定理 --- poj : 2154 Color
Color Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7873 Accepted: 2565 Description ...
- EasyUI文档学习心得
概述 jQuery EasyUI 是一组基于jQuery 的UI 插件集合,它可以让开发者在几乎完全不需要CSS以及复杂的JS代码情况下完成美观且功能强大的Web界面. 本文主要说明一些如何利用Eas ...
- 与众不同 windows phone (51) - 8.1 新增控件: DatePickerFlyout, TimePickerFlyout
[源码下载] 与众不同 windows phone (51) - 8.1 新增控件: DatePickerFlyout, TimePickerFlyout 作者:webabcd 介绍与众不同 wind ...
- Oracle数据库导入导出总结(dmp文件)
Oracle 10G 管理页面(Oracle Enterprise Manager 10g): http://localhost:1158/em http://localhost:1158/em/co ...
- mysql学习笔记 第七天
数据库的备份与还原 数据库的备份与还原是后面章节的内容,但是在学习的时候已经需要数据的备份与还原了,所以就了解了一下.数据库有很多种备份方法,我学习的是其中的一种 备份: 对于数据库的备份: C:&g ...
- 从零开始学习Linux (cd命令)
上一篇博客中提到,我们学习命令大多都要参考 --help 这个选项.但是cd命令并没有这个选项. 我们可以通过 help cd 来查看cd的使用方式.其实cd命令挺简单的,它的作用是进入文件夹,也就是 ...
- 泛函编程(17)-泛函状态-State In Action
对OOP编程人员来说,泛函状态State是一种全新的数据类型.我们在上节做了些介绍,在这节我们讨论一下State类型的应用:用一个具体的例子来示范如何使用State类型.以下是这个例子的具体描述: 模 ...