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 ...
随机推荐
- 2016 SDCC会后总结
很荣幸作为前端专题讲师参加2016年SDCC,与周爱民老师同台,听业界牛人的分享真是受益匪浅.对我来说是第一次在如此规模的专题论坛上演讲,全程紧张的要命,提前准备好的内容有很多因为紧张没有讲出来.此次 ...
- Transact-SQL 示例 - UPDATE中使用INNER JOIN
一般情况下博主已经对在SELECT语句当中使用INNER JOIN非常娴熟,但在UPDATE当中使用INNER JOIN的场景就为数不多了.以下博主将为你介绍在UPDATE场景当中使用INNER JO ...
- Direct3D11学习:(一)开发环境配置
转载请注明出处:http://www.cnblogs.com/Ray1024 从今天开始,开启一个新的系列:Direct3D11的学习教程. 因为一直对3D方面比较感兴趣,最近决定开始学习D3D知 ...
- ASP.NET MVC使用input标签上传文件
有些时间学习了,温习一下ASP.NET MVC了.上传文档是在开发过程中,必须撑握的一个功能.以前上传均是使用第三方控件uploadify来实现,今天使使用VS标准标签input 的type=&quo ...
- 剑指offer面试题31连续子数组的最大和
一.题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果 ...
- 【Bootstrap基础学习】02 Bootstrap的布局组件应用示例
字体图标的应用示例 <button type="button" class="btn btn-default"> <span class=&q ...
- Python轻量Web框架Flask使用
http://blog.csdn.net/jacman/article/details/49098819 目录(?)[+] Flask安装 Python开发工具EclipsePyDev准备 Flask ...
- SignalR-入门
1.什么是SignalR: ASP.NET SignalR是为简化开发开发人员将实时web内容添加到应用程序过程而提供的类库.实时web功能指的是让服务器代码可以随时主动推送内容给客户端,而不是让服务 ...
- php中的常用数组函数(二)(数组元素过滤 array_filter())
array_filter($arr, 'filter_func'); //参数1,要过滤的数组 //参数2,过滤的函数,返回false时,不添加这个元素,返回true添加这个元素. 示例代码: /** ...
- SQL Server SQL语句执行顺序
执行顺序: 1.FROM:对FROM子句中前两个表执行笛卡尔积生成虚拟表vt1 2.ON:对vt1表应用ON筛选器只有满足 为真的行才被插入vt2 3.OUTER(join):如果指定了 OUTER ...