属性动画:
1.在XML中定义属性动画
1.1在res文件下,创建一个animator文件
1.2在这个文件下,创建XML文件,注意根节点是ObjectAnimator
1.3AnimatorInflater把XML文件变成一个控件对象
1.4把要做动画的控件设置给控件对象
1.5执行动画
在
MainActivity
2.在JAVA代码中实现属性动画
2.1创建属性动画对象,指定动画的类型,参数
2.2指定动画的时长
2.3指定动画播放的形式
2.4指定动画再次播放的次数
2.5开启动画
ObjectAnimator alpha = ObjectAnimator.ofFloat(img_tu,"alpha",new float[]{0.0f,0.2f,0.5f,0.8f,1.0f});
alpha.setDuration(2000)//定义动画执行的时长
alpha.setRepeatMode(ObjectAnimator.RESTART);//设置动画执行的模式
alpha.setRepeatCount();//设置动画执行的次数
alpha.start();//开启动画
3.集合动画
3.1创建动画集合对象 AnimatorSet
package
com.example.shuxingdongh_demo;
import
android.animation.Animator;
import
android.animation.AnimatorInflater;
import
android.animation.AnimatorSet;
import
android.animation.ObjectAnimator;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.view.View;
import
android.view.animation.Animation;
import
android.view.animation.TranslateAnimation;
import
android.widget.Button;
import
android.widget.ImageView;
import
android.widget.Toast;
public class
MainActivity
extends
AppCompatActivity
implements
View.OnClickListener {
private
Button
btn_tm
;
private
Button
btn_sf
;
private
Button
btn_xz
;
private
Button
btn_wy
;
private
Button
btn_zuh
;
private
ImageView
img_tu
;
private
Button
btn_bj
;
@Override
protected void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//初始化
//这里用的是XML的形式,引用XML里的属性动画
Animator Xmlanimator = AnimatorInflater.
loadAnimator
(
this
,R.animator.donghua);
//把控件对象放到属性动画当中
Xmlanimator.setTarget(
img_tu
);
//开启动画
Xmlanimator.start();
}
private void
initView() {
btn_tm
= findViewById(R.id.btn_tm);
btn_sf
= findViewById(R.id.btn_sf);
btn_xz
= findViewById(R.id.btn_xz);
btn_wy
= findViewById(R.id.btn_wy);
btn_zuh
= findViewById(R.id.btn_zuh);
img_tu
= findViewById(R.id.img_tu);
//补间动画
btn_bj
= findViewById(R.id.btn_bj);
//添加事件
btn_tm
.setOnClickListener(
this
);
btn_sf
.setOnClickListener(
this
);
btn_xz
.setOnClickListener(
this
);
btn_wy
.setOnClickListener(
this
);
btn_zuh
.setOnClickListener(
this
);
btn_bj
.setOnClickListener(
new
View.OnClickListener() {
@Override
public void
onClick(View view) {
TranslateAnimation translate =
new
TranslateAnimation(Animation.
RELATIVE_TO_PARENT
,
0.1f
, Animation.
RELATIVE_TO_PARENT
,
0.5f
,
Animation.
RELATIVE_TO_PARENT
,
0.1f
, Animation.
RELATIVE_TO_PARENT
,
0.5f
);
//设置执行时间
translate.setDuration(
3000
);
//设置执行的控件
img_tu
.startAnimation(translate);
}
});
img_tu
.setOnClickListener(
new
View.OnClickListener() {
@Override
public void
onClick(View view) {
Toast.
makeText
(MainActivity.
this
,
"你点击了图片"
, Toast.
LENGTH_SHORT
).show();
}
});
}
//添加点击事件
@Override
public void
onClick(View view) {
switch
(view.getId()){
case
R.id.btn_tm:
//透明度
ObjectAnimator alpha = ObjectAnimator.
ofFloat
(
img_tu
,
"alpha"
,
new float
[]{
0.1f
,
0.3f
,
0.5f
,
0.8f
,
1.0f
});
alpha.setDuration(
3000
);
//设置动画执行的时长
alpha.setRepeatMode(ObjectAnimator.
RESTART
);
//设置动画执行的模式
alpha.setRepeatCount(
1
);
//设置动画执行的次数
alpha.start();
//开启动画
break
;
case
R.id.btn_sf:
//缩放
ObjectAnimator scaleX = ObjectAnimator.
ofFloat
(
img_tu
,
"scaleX"
,
new float
[]{
0f
,
0.5f
,
1f
});
scaleX.setDuration(
3000
);
//设置动画执行的时长
scaleX.setRepeatMode(ObjectAnimator.
RESTART
);
//设置动画执行的模式
scaleX.setRepeatCount(
1
);
//设置动画执行的次数
scaleX.start();
//开启动画
break
;
case
R.id.btn_xz:
//旋转
ObjectAnimator rotation = ObjectAnimator.
ofFloat
(
img_tu
,
"rotation"
,
new float
[]{
90f
,
180f
,
270f
,
360f
});
rotation.setDuration(
3000
);
//设置动画执行的时长
rotation.setRepeatMode(ObjectAnimator.
RESTART
);
//设置动画执行的模式
rotation.setRepeatCount(
1
);
//设置动画执行的次数
rotation.start();
//开启动画
break
;
case
R.id.btn_wy:
//位移
ObjectAnimator translationY = ObjectAnimator.
ofFloat
(
img_tu
,
"translationY"
,
new float
[]{
10f
,
20f
,
30f
,
40f
});
translationY.setDuration(
3000
);
//设置动画执行的时长
translationY.setRepeatMode(ObjectAnimator.
RESTART
);
//设置动画执行的模式
translationY.setRepeatCount(
1
);
//设置动画执行的次数
translationY.start();
//开启动画
break
;
case
R.id.btn_zuh:
//组合
AnimatorSet animatorSet =
new
AnimatorSet();
ObjectAnimator rotation1 = ObjectAnimator.
ofFloat
(
img_tu
,
"rotation"
,
new float
[]{
90f
,
180f
,
270f
,
360f
});
rotation1.setDuration(
3000
);
//设置动画执行的时长
ObjectAnimator translationX = ObjectAnimator.
ofFloat
(
img_tu
,
"translationX"
,
new float
[]{
0f
,
20f
,
40f
,
60f
,
80f
});
translationX.setDuration(
3000
);
//设置动画执行的时长
animatorSet.playTogether(rotation1,translationX);
animatorSet.start();
break
;
}
}
}