安卓开发20:动画之Animation 详细使用-主要通过java代码实现动画效果
2015-09-25 15:04
986 查看
AlphaAnimation 透明效果实现:
activity_main.xml中仅仅是一个简单的图片,下面的例子都会使用这个xml:[html]
view plaincopyprint?
<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=".MainActivity" >
<!-- 用于动画的图片 -->
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="70dp"
android:layout_marginTop="138dp"
android:src="@drawable/jhs_button1_h" />
</RelativeLayout>
<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=".MainActivity" > <!-- 用于动画的图片 --> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="70dp" android:layout_marginTop="138dp" android:src="@drawable/jhs_button1_h" /> </RelativeLayout>
透明效果的java代码:
[java]
view plaincopyprint?
package com.example.test.com;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.imageView1);
//图片点击的时候,启动动画效果
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Animation anim = getAlphaAnimation();
v.startAnimation(anim);
}
});
}
/**
* 透明效果
* @return
*/
public Animation getAlphaAnimation() {
//实例化 AlphaAnimation 主要是改变透明度
//透明度 从 1-不透明 0-完全透明
Animation animation = new AlphaAnimation(1.0f, 0.5f);
//设置动画插值器 被用来修饰动画效果,定义动画的变化率
animation.setInterpolator(new DecelerateInterpolator());
//设置动画执行时间
animation.setDuration(1000);
return animation;
}
}
package com.example.test.com; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.DecelerateInterpolator; import android.widget.ImageView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); ImageView imageView = (ImageView) findViewById(R.id.imageView1); //图片点击的时候,启动动画效果 imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Animation anim = getAlphaAnimation(); v.startAnimation(anim); } }); } /** * 透明效果 * @return */ public Animation getAlphaAnimation() { //实例化 AlphaAnimation 主要是改变透明度 //透明度 从 1-不透明 0-完全透明 Animation animation = new AlphaAnimation(1.0f, 0.5f); //设置动画插值器 被用来修饰动画效果,定义动画的变化率 animation.setInterpolator(new DecelerateInterpolator()); //设置动画执行时间 animation.setDuration(1000); return animation; } }
ScaleAnimation 缩放效果实现:
[java]view plaincopyprint?
package com.example.test.com;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.imageView1);
//图片点击的时候,启动动画效果
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Animation scalegetAnim = getScaleAnimation();
v.startAnimation(scalegetAnim);
}
});
}
/**
* 缩放动画
* @return
*/
public Animation getScaleAnimation() {
//实例化 ScaleAnimation 主要是缩放效果
//参数:fromX-动画开始前,x坐标 toX-动画结束后x坐标
//fromY-动画开始前,Y坐标 toY-动画结束后Y坐标
//pivotXType - 为动画相对于物件的X坐标的参照物 pivotXValue - 值
//pivotYType - 为动画相对于物件的Y坐标的参照物 pivotYValue - 值
Animation animation = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
//设置动画插值器 被用来修饰动画效果,定义动画的变化率
animation.setInterpolator(new DecelerateInterpolator());
//设置动画执行时间
animation.setDuration(1000);
return animation;
}
}
package com.example.test.com; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.DecelerateInterpolator; import android.view.animation.ScaleAnimation; import android.widget.ImageView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); ImageView imageView = (ImageView) findViewById(R.id.imageView1); //图片点击的时候,启动动画效果 imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Animation scalegetAnim = getScaleAnimation(); v.startAnimation(scalegetAnim); } }); } /** * 缩放动画 * @return */ public Animation getScaleAnimation() { //实例化 ScaleAnimation 主要是缩放效果 //参数:fromX-动画开始前,x坐标 toX-动画结束后x坐标 //fromY-动画开始前,Y坐标 toY-动画结束后Y坐标 //pivotXType - 为动画相对于物件的X坐标的参照物 pivotXValue - 值 //pivotYType - 为动画相对于物件的Y坐标的参照物 pivotYValue - 值 Animation animation = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); //设置动画插值器 被用来修饰动画效果,定义动画的变化率 animation.setInterpolator(new DecelerateInterpolator()); //设置动画执行时间 animation.setDuration(1000); return animation; } }
RotateAnimation 旋转效果实现:
[java]view plaincopyprint?
package com.example.test.com;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.imageView1);
//图片点击的时候,启动动画效果
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Animation rotateAnim = getRotateAnimation();
v.startAnimation(rotateAnim);
}
});
}
/**
* 旋转
* @return
*/
public Animation getRotateAnimation() {
//实例化RotateAnimation
//以自身中心为圆心,旋转360度 正值为顺时针旋转,负值为逆时针旋转
RotateAnimation animation = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
//设置动画插值器 被用来修饰动画效果,定义动画的变化率
animation.setInterpolator(new DecelerateInterpolator());
//设置动画执行时间
animation.setDuration(1000);
return animation;
}
}
package com.example.test.com; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.DecelerateInterpolator; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.widget.ImageView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); ImageView imageView = (ImageView) findViewById(R.id.imageView1); //图片点击的时候,启动动画效果 imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Animation rotateAnim = getRotateAnimation(); v.startAnimation(rotateAnim); } }); } /** * 旋转 * @return */ public Animation getRotateAnimation() { //实例化RotateAnimation //以自身中心为圆心,旋转360度 正值为顺时针旋转,负值为逆时针旋转 RotateAnimation animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); //设置动画插值器 被用来修饰动画效果,定义动画的变化率 animation.setInterpolator(new DecelerateInterpolator()); //设置动画执行时间 animation.setDuration(1000); return animation; } }
TranslateAnimation 移动效果实现:
[java]view plaincopyprint?
package com.example.test.com;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.imageView1);
//图片点击的时候,启动动画效果
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Animation translateAnim = getTranslateAnimation();
v.startAnimation(translateAnim);
}
});
}
/**
* 移动
* @return
*/
public Animation getTranslateAnimation() {
//实例化TranslateAnimation
//以自身为坐标系和长度单位,从(0,0)移动到(1,1)
TranslateAnimation animation = new
TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 1.0f,
Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 1.0f);
//设置动画插值器 被用来修饰动画效果,定义动画的变化率
animation.setInterpolator(new DecelerateInterpolator());
//设置动画执行时间
animation.setDuration(1000);
return animation;
}
}
package com.example.test.com; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.DecelerateInterpolator; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; import android.widget.ImageView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); ImageView imageView = (ImageView) findViewById(R.id.imageView1); //图片点击的时候,启动动画效果 imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Animation translateAnim = getTranslateAnimation(); v.startAnimation(translateAnim); } }); } /** * 移动 * @return */ public Animation getTranslateAnimation() { //实例化TranslateAnimation //以自身为坐标系和长度单位,从(0,0)移动到(1,1) TranslateAnimation animation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f); //设置动画插值器 被用来修饰动画效果,定义动画的变化率 animation.setInterpolator(new DecelerateInterpolator()); //设置动画执行时间 animation.setDuration(1000); return animation; } }
AnimationSet 动画集合实现和使用:
[java]view plaincopyprint?
package com.example.test.com;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.imageView1);
//图片点击的时候,启动动画效果
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//AnimationSet类是一个Animation集合,里面可以许多Animation,
//且在AnimationSet中设置的属性适用于里面的所有Animation。
//参数true 则共享@Interpolator
AnimationSet set = new AnimationSet(true);
//透明
Animation alphaAnim = getAlphaAnimation();
set.addAnimation(alphaAnim);
//缩放
Animation scalegetAnim = getScaleAnimation();
set.addAnimation(scalegetAnim);
//旋转
Animation rotateAnim = getRotateAnimation();
set.addAnimation(rotateAnim);
//移动 上面三个动画是同时进行的,我现在需要让移动这个动画在上面的动画之后执行
//需要使用setStartOffset 设置动画开始的时间
Animation translateAnim = getTranslateAnimation();
translateAnim.setStartOffset(500);
set.addAnimation(translateAnim);
v.startAnimation(set);
}
});
}
/**
* 透明效果
* @return
*/
public Animation getAlphaAnimation() {
//实例化 AlphaAnimation 主要是改变透明度
//透明度 从 1-不透明 0-完全透明
Animation animation = new AlphaAnimation(1.0f, 0.8f);
//设置动画插值器 被用来修饰动画效果,定义动画的变化率
animation.setInterpolator(new DecelerateInterpolator());
//设置动画执行时间
animation.setDuration(1000);
return animation;
}
/**
* 缩放动画
* @return
*/
public Animation getScaleAnimation() {
//实例化 ScaleAnimation 主要是缩放效果
//参数:fromX-动画开始前,x坐标 toX-动画结束后x坐标
//fromY-动画开始前,Y坐标 toY-动画结束后Y坐标
//pivotXType - 为动画相对于物件的X坐标的参照物 pivotXValue - 值
//pivotYType - 为动画相对于物件的Y坐标的参照物 pivotYValue - 值
Animation animation = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
//设置动画插值器 被用来修饰动画效果,定义动画的变化率
animation.setInterpolator(new DecelerateInterpolator());
//设置动画执行时间
animation.setDuration(1000);
return animation;
}
/**
* 旋转
* @return
*/
public Animation getRotateAnimation() {
//实例化RotateAnimation
//以自身中心为圆心,旋转360度 正值为顺时针旋转,负值为逆时针旋转
RotateAnimation animation = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
//设置动画插值器 被用来修饰动画效果,定义动画的变化率
animation.setInterpolator(new DecelerateInterpolator());
//设置动画执行时间
animation.setDuration(1000);
return animation;
}
/**
* 移动
* @return
*/
public Animation getTranslateAnimation() {
//实例化TranslateAnimation
//以自身为坐标系和长度单位,从(0,0)移动到(1,1)
TranslateAnimation animation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
1.0f, Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 1.0f);
//设置动画插值器 被用来修饰动画效果,定义动画的变化率
animation.setInterpolator(new DecelerateInterpolator());
//设置动画执行时间
animation.setDuration(1000);
return animation;
}
}
package com.example.test.com; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.DecelerateInterpolator; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; import android.widget.ImageView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); ImageView imageView = (ImageView) findViewById(R.id.imageView1); //图片点击的时候,启动动画效果 imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //AnimationSet类是一个Animation集合,里面可以许多Animation, //且在AnimationSet中设置的属性适用于里面的所有Animation。 //参数true 则共享@Interpolator AnimationSet set = new AnimationSet(true); //透明 Animation alphaAnim = getAlphaAnimation(); set.addAnimation(alphaAnim); //缩放 Animation scalegetAnim = getScaleAnimation(); set.addAnimation(scalegetAnim); //旋转 Animation rotateAnim = getRotateAnimation(); set.addAnimation(rotateAnim); //移动 上面三个动画是同时进行的,我现在需要让移动这个动画在上面的动画之后执行 //需要使用setStartOffset 设置动画开始的时间 Animation translateAnim = getTranslateAnimation(); translateAnim.setStartOffset(500); set.addAnimation(translateAnim); v.startAnimation(set); } }); } /** * 透明效果 * @return */ public Animation getAlphaAnimation() { //实例化 AlphaAnimation 主要是改变透明度 //透明度 从 1-不透明 0-完全透明 Animation animation = new AlphaAnimation(1.0f, 0.8f); //设置动画插值器 被用来修饰动画效果,定义动画的变化率 animation.setInterpolator(new DecelerateInterpolator()); //设置动画执行时间 animation.setDuration(1000); return animation; } /** * 缩放动画 * @return */ public Animation getScaleAnimation() { //实例化 ScaleAnimation 主要是缩放效果 //参数:fromX-动画开始前,x坐标 toX-动画结束后x坐标 //fromY-动画开始前,Y坐标 toY-动画结束后Y坐标 //pivotXType - 为动画相对于物件的X坐标的参照物 pivotXValue - 值 //pivotYType - 为动画相对于物件的Y坐标的参照物 pivotYValue - 值 Animation animation = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); //设置动画插值器 被用来修饰动画效果,定义动画的变化率 animation.setInterpolator(new DecelerateInterpolator()); //设置动画执行时间 animation.setDuration(1000); return animation; } /** * 旋转 * @return */ public Animation getRotateAnimation() { //实例化RotateAnimation //以自身中心为圆心,旋转360度 正值为顺时针旋转,负值为逆时针旋转 RotateAnimation animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); //设置动画插值器 被用来修饰动画效果,定义动画的变化率 animation.setInterpolator(new DecelerateInterpolator()); //设置动画执行时间 animation.setDuration(1000); return animation; } /** * 移动 * @return */ public Animation getTranslateAnimation() { //实例化TranslateAnimation //以自身为坐标系和长度单位,从(0,0)移动到(1,1) TranslateAnimation animation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f); //设置动画插值器 被用来修饰动画效果,定义动画的变化率 animation.setInterpolator(new DecelerateInterpolator()); //设置动画执行时间 animation.setDuration(1000); return animation; } }
Interpolator 描述动画的速率:
安卓默认的Interpolator:AccelerateInterpolator:动画开始时比较慢,然后逐渐加速。
DecelerateInterpolator:动画开始时比较快,然后逐渐减速。
AccelerateDecelerateInterpolator:动画开始时和结束时比较慢,中间过程加速。
LinearInterpolator:动画匀速进行。
CycleInterpolator:动画循环播放指定次数,速率沿着正弦曲线改变。
DecelerateInterpolator代码:主要实现getInterpolation ,也可以自定义
[java]
view plaincopyprint?
/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.view.animation; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; /** * An interpolator where the rate of change starts out quickly and * and then decelerates. * */ public class DecelerateInterpolator implements Interpolator { public DecelerateInterpolator() { } /** * Constructor * * @param factor Degree to which the animation should be eased. Setting factor to 1.0f produces * an upside-down y=x^2 parabola. Increasing factor above 1.0f makes exaggerates the * ease-out effect (i.e., it starts even faster and ends evens slower) */ public DecelerateInterpolator(float factor) { mFactor = factor; } public DecelerateInterpolator(Context context, AttributeSet attrs) { TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.DecelerateInterpolator); mFactor = a.getFloat(com.android.internal.R.styleable.DecelerateInterpolator_factor, 1.0f); a.recycle(); } public float getInterpolation(float input) { float result; if (mFactor == 1.0f) { result = (float)(1.0f - (1.0f - input) * (1.0f - input)); } else { result = (float)(1.0f - Math.pow((1.0f - input), 2 * mFactor)); } return result; } private float mFactor = 1.0f; }
/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.view.animation; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; /** * An interpolator where the rate of change starts out quickly and * and then decelerates. * */ public class DecelerateInterpolator implements Interpolator { public DecelerateInterpolator() { } /** * Constructor * * @param factor Degree to which the animation should be eased. Setting factor to 1.0f produces * an upside-down y=x^2 parabola. Increasing factor above 1.0f makes exaggerates the * ease-out effect (i.e., it starts even faster and ends evens slower) */ public DecelerateInterpolator(float factor) { mFactor = factor; } public DecelerateInterpolator(Context context, AttributeSet attrs) { TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.DecelerateInterpolator); mFactor = a.getFloat(com.android.internal.R.styleable.DecelerateInterpolator_factor, 1.0f); a.recycle(); } public float getInterpolation(float input) { float result; if (mFactor == 1.0f) { result = (float)(1.0f - (1.0f - input) * (1.0f - input)); } else { result = (float)(1.0f - Math.pow((1.0f - input), 2 * mFactor)); } return result; } private float mFactor = 1.0f; }
使用:
[java]
view plaincopyprint?
//设置动画插值器 被用来修饰动画效果,定义动画的变化率
animation.setInterpolator(new DecelerateInterpolator());
//设置动画插值器 被用来修饰动画效果,定义动画的变化率 animation.setInterpolator(new DecelerateInterpolator());
AnimationListener 监听器:
可以监听动画前,动画结束,动画repeat的时候的动作,对上面代码中的移动效果进行动画监听:[java]
view plaincopyprint?
/**
* 移动
* @return
*/
public Animation getTranslateAnimation() {
//实例化TranslateAnimation
//以自身为坐标系和长度单位,从(0,0)移动到(1,1)
TranslateAnimation animation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
1.0f, Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 1.0f);
//设置动画插值器 被用来修饰动画效果,定义动画的变化率
animation.setInterpolator(new DecelerateInterpolator());
//设置重复动画
animation.setRepeatCount(2);
//设置动画执行时间
animation.setDuration(1000);
//设置监听器
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
//动画开始前
Toast.makeText(getBaseContext(), "Strart!", Toast.LENGTH_SHORT).show();
}
@Override
public void onAnimationRepeat(Animation animation) {
//重复动画的时候,
Toast.makeText(getBaseContext(), "Repeat!", Toast.LENGTH_SHORT).show();
}
@Override
public void onAnimationEnd(Animation animation) {
// 结束动画的时候
Toast.makeText(getBaseContext(), "End!", Toast.LENGTH_SHORT).show();
}
});
return animation;
}
/** * 移动 * @return */ public Animation getTranslateAnimation() { //实例化TranslateAnimation //以自身为坐标系和长度单位,从(0,0)移动到(1,1) TranslateAnimation animation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f); //设置动画插值器 被用来修饰动画效果,定义动画的变化率 animation.setInterpolator(new DecelerateInterpolator()); //设置重复动画 animation.setRepeatCount(2); //设置动画执行时间 animation.setDuration(1000); //设置监听器 animation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { //动画开始前 Toast.makeText(getBaseContext(), "Strart!", Toast.LENGTH_SHORT).show(); } @Override public void onAnimationRepeat(Animation animation) { //重复动画的时候, Toast.makeText(getBaseContext(), "Repeat!", Toast.LENGTH_SHORT).show(); } @Override public void onAnimationEnd(Animation animation) { // 结束动画的时候 Toast.makeText(getBaseContext(), "End!", Toast.LENGTH_SHORT).show(); } }); return animation; }
备注内容
动画运动完毕后,停止在动画完成的位置[java]
view plaincopyprint?
animation.setFillAfter(true);
animation.setFillEnabled(true);
animation.setFillAfter(true); animation.setFillEnabled(true);
动画结束后,清除动画
[java]
view plaincopyprint?
tempLayout.clearAnimation();
tempLayout.clearAnimation();
动画结束后,改变View的偏移量
[java]
view plaincopyprint?
tempLayout.offsetLeftAndRight(width);
相关文章推荐
- 反射运用
- test7.8
- Spring in Action 第一部分学习笔记
- SpringMvc一个简单的框架入门程序
- MyEclipse 2015 Stable 2.0破解方法
- maven的配置和eclipse maven插件安装
- JAVA反射
- Java基础知识强化86:BigInteger类之BigInteger概述和构造方法
- spring中文乱码问题
- Failed to load JavaHL Library解决方法
- Java Web开发之访问路径问题分析
- Java Clone, Shallow Copy and Deep Copy
- JAVA反射例子
- An internal error occurred during: "Initializing Java Tooling".
- Java基础知识强化85:System类之arraycopy()方法(数组拷贝)
- Java产生随机数和随机字母的方法
- binbinyang---eclipse中show whitespace characters按钮编辑器中显示导致恶心的乱码
- java的system.arraycopy()方法
- 浅论Maven和Git的原理及展示其与Eclipse的集成
- java编译找不到符号