补间动画
xml文件
透明
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1"
android:duration="2000"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="0.1">
</alpha>
旋转
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:interpolator="@android:anim/bounce_interpolator"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50"
android:pivotY="50"
>
</rotate>
缩放
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:interpolator="@android:anim/bounce_interpolator"
android:fromXScale="1"
android:toXScale="0.5"
android:fromYScale="1"
android:toYScale="1.5"
android:pivotY="50"
android:pivotX="50"
>
</scale>
平移
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:interpolator="@android:anim/bounce_interpolator"
android:fromYDelta="0"
android:toYDelta="300"
android:fromXDelta="0"
android:toXDelta="300"
>
</translate>
activity中代码
package com.fenghongzhang.anim.tween;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.fenghongzhang.anim.R;
public class TweenActivity extends AppCompatActivity {
private Button btn;
private Button btn1;
private Button btn2;
private Button btn3;
private ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tween);
initView();
}
public void btn(View view) {
Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha);
img.startAnimation(animation);
}
public void btn1(View view) {
Animation animation = AnimationUtils.loadAnimation(this, R.anim.rotate);
img.startAnimation(animation);
}
public void btn2(View view) {
Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale);
img.startAnimation(animation);
}
public void btn3(View view) {
Animation animation = AnimationUtils.loadAnimation(this, R.anim.translate);
img.startAnimation(animation);
}
private void initView() {
btn = (Button) findViewById(R.id.btn);
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);
btn3 = (Button) findViewById(R.id.btn3);
img = (ImageView) findViewById(R.id.img);
}
}
帧动画
xml文件
先放入找好的图片
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/anim1" android:duration="200"></item>
<item android:drawable="@drawable/anim2" android:duration="200"></item>
<item android:drawable="@drawable/anim3" android:duration="200"></item>
<item android:drawable="@drawable/anim4" android:duration="200"></item>
<item android:drawable="@drawable/anim5" android:duration="200"></item>
<item android:drawable="@drawable/anim6" android:duration="200"></item>
<item android:drawable="@drawable/anim7" android:duration="200"></item>
<item android:drawable="@drawable/anim8" android:duration="200"></item>
<item android:drawable="@drawable/anim9" android:duration="200"></item>
<item android:drawable="@drawable/anim10" android:duration="200"></item>
<item android:drawable="@drawable/anim11" android:duration="200"></item>
<item android:drawable="@drawable/anim12" android:duration="200"></item>
</animation-list>
activity代码
package com.example.day05;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
public class Main2Activity extends AppCompatActivity {
private Button bnt;
private ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initView();
bnt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
img.setImageResource(R.drawable.kawayi);
AnimationDrawable drawable = (AnimationDrawable) img.getDrawable();
drawable.start();
}
});
}
private void initView() {
bnt = (Button) findViewById(R.id.bnt);
img = (ImageView) findViewById(R.id.img);
}
}
属性动画
ValueAnimator
java代码
package com.fenghongzhang.anim;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class Main2Activity extends AppCompatActivity {
private static final String TAG = "Main2Activity";
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initView();
}
public void btn(View view) {
ValueAnimator valueAnimator = ValueAnimator.ofInt(btn.getLayoutParams().width, 500);
//动画时间
valueAnimator.setDuration(2000);
//重复次数
valueAnimator.setRepeatCount(3);
//重复方向,
valueAnimator.setRepeatMode(ValueAnimator.REVERSE);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//改变的值
Integer animatedValue = (Integer) animation.getAnimatedValue();
Log.i(TAG, "onAnimationUpdate: "+animatedValue);
btn.getLayoutParams().width = animatedValue;
btn.requestLayout();
}
});
valueAnimator.start();
}
private void initView() {
btn = (Button) findViewById(R.id.btn);
}
}
xml文件
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:repeatCount="1"
android:repeatMode="reverse"
android:propertyName="translationX"
android:valueFrom="100"
android:valueTo="400"
android:interpolator="@android:anim/accelerate_interpolator"
android:valueType="floatType" />
<!--android:valueFrom="0" // 初始值
android:valueTo="100" // 结束值
android:valueType="intType" // 变化值类型 :floatType & intType
//重要
android:propertyName="rotation" alpha scaleX或者scaleY translationX 变化的方式. 透明,旋转.移动
android:duration="3000" // 动画持续时间(ms),必须设置,动画才有效果
android:startOffset ="1000" // 动画延迟开始时间(ms)
android:fillBefore = “true” // 动画播放完后,视图是否会停留在动画开始的状态,默认为true
android:fillAfter = “false” // 动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为false
android:fillEnabled= “true” // 是否应用fillBefore值,对fillAfter值无影响,默认为true
android:repeatMode= “restart” // 选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restart|
android:repeatCount = “0” // 重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复
android:interpolator = @[package:]anim/interpolator_resource // 插值器,即影响动画的播放速度,下面会详细讲
-->
java代码
public void btn1(View view) {
Animator animator = AnimatorInflater.loadAnimator(this, R.animator.bianhua);
animator.setTarget(btn1);
animator.start();
}
使用 ObjectAnimator 实现四种动画
alpha
scaleX/scaleY
translateX/translateY
rotation
java 代码
public void btn2(View view) {
// final ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "alpha", 0, 1);
// ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "translationX", 0, 200);
// ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "translationY", 0, 200, 100);
// ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "scaleX", 1, 5);
// ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "scaleY", 1, 5);
// ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "rotation", 0, 270);
ObjectAnimator animator = ObjectAnimator.ofFloat(btn, "rotationY", 0, 180, -100);
animator.setDuration(2000);
animator.setRepeatCount(2);
animator.setInterpolator(new AccelerateInterpolator());
// animator.setInterpolator(new DecelerateInterpolator());
animator.setRepeatMode(ValueAnimator.RESTART);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
}
});
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animator.start();
}
AnimationSet 动画集合
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(3000);
animatorSet.setInterpolator(new LinearInterpolator());
ObjectAnimator translationX = ObjectAnimator.ofFloat(btn, "translationX", 0, 300);
ObjectAnimator rotation = ObjectAnimator.ofFloat(btn, "rotation", 0, 720);
ObjectAnimator scaleX = ObjectAnimator.ofFloat(btn, "scaleX", 1, 5);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(btn, "scaleY", 1, 5);
ObjectAnimator alpha = ObjectAnimator.ofFloat(btn, "alpha", 1, 0);
//顺序播放
animatorSet.playSequentially(translationX, rotation, scaleX, scaleY, alpha);
//同时执行
// animatorSet.playTogether(scaleX, scaleY);
animatorSet.start();
2663

被折叠的 条评论
为什么被折叠?



