1.渐变动画TweenAnimation
2.创建透明度变化
1、主布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imgshow"
android:src="@drawable/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
2、activity文件
public class MainActivity extends AppCompatActivity {
private ImageView imgshow=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgshow=findViewById(R.id.imgshow);
imgshow.setOnClickListener(new OnclickListenerImpl());
}
private class OnclickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
AnimationSet set=new AnimationSet(true);
AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);//从完全显示到完全透明
alphaAnimation.setDuration(2000);//2秒内完成
set.addAnimation(alphaAnimation);
MainActivity.this.imgshow.startAnimation(set);
}
}
}
结果:完成透明过度
3.创建缩放变化
以上例为基础,修改onClick事件代码
AnimationSet set=new AnimationSet(true);
ScaleAnimation scaleAnimation=new ScaleAnimation(1,0.0f,1,0.0f,
AnimationSet.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
scaleAnimation.setDuration(2000);//2秒内完成
set.addAnimation(scaleAnimation);
MainActivity.this.imgshow.startAnimation(set);
结果:
完成缩放
4.平移的变化
以上例为基础,修改onClick事件代码
```java
private class OnclickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
AnimationSet set=new AnimationSet(true);
TranslateAnimation translateAnimation=new TranslateAnimation(Animation.RELATIVE_TO_SELF,0.0f,
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.0f,Animation.RELATIVE_TO_SELF,1.5f);
translateAnimation.setDuration(2000);//2秒内完成
set.addAnimation(translateAnimation);
imgshow.startAnimation(set);
}
}
结果:
完成移动
4.旋转的变化
private class OnclickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
AnimationSet set=new AnimationSet(true);
RotateAnimation translateAnimation=new RotateAnimation(0,360,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.0f);
translateAnimation.setDuration(2000);//2秒内完成
set.addAnimation(translateAnimation);
imgshow.startAnimation(set);
}
}
结果:
完成旋转
5.旋转加缩放的变化
private class OnclickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
AnimationSet set=new AnimationSet(true);
RotateAnimation translateAnimation=new RotateAnimation(0,360,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.0f);
ScaleAnimation scaleAnimation=new ScaleAnimation(1,0.0f,1,0.0f,
AnimationSet.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
set.setDuration(2000);//2秒内完成
set.addAnimation(translateAnimation);
set.setRepeatCount(3);//重复三次
set.addAnimation(scaleAnimation);
imgshow.startAnimation(set);
}
}
结果:
完成旋转和缩放的叠加,但重复未实现
6.interpolator定义动画速率
其实就是加减速的问题,只需要在设置动画集合的时候设置即可
7.interpolator设置加速度
private class OnclickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
AnimationSet set=new AnimationSet(true);
RotateAnimation translateAnimation=new RotateAnimation(0,360,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.0f);
ScaleAnimation scaleAnimation=new ScaleAnimation(1,0.0f,1,0.0f,
AnimationSet.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
set.setRepeatCount(3);//重复三次
set.setDuration(5000);//5秒内完成
set.addAnimation(translateAnimation);//增加动画
set.addAnimation(scaleAnimation);
set.setInterpolator(new AccelerateInterpolator());//设置动画速率为加速度
imgshow.startAnimation(set);
}
}
结果:
完成旋转和缩放的加速度先慢后快
8.动画监听器:AnimationListener
1、布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/group"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imgshow"
android:src="@drawable/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
2、activity文件
public class MainActivity extends AppCompatActivity {
private ImageView imgshow=null;
private ViewGroup group=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgshow=findViewById(R.id.imgshow);
group=findViewById(R.id.group);
AnimationSet set=new AnimationSet(true);
RotateAnimation translateAnimation=new RotateAnimation(0,360,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.0f);
set.setDuration(3000);//3秒内完成
set.addAnimation(translateAnimation);//增加动画
set.setAnimationListener(new AnimationListenrImpl());//这个是在set动画对象上调用的而不是在图像统建上调用
imgshow.startAnimation(set);
}
private class AnimationListenrImpl implements Animation.AnimationListener {//实现的事动画监听接口
@Override
public void onAnimationStart(Animation animation) {
if (animation instanceof AnimationSet){
AnimationSet set= (AnimationSet) animation;
AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);
alphaAnimation.setDuration(3000);
set.addAnimation(alphaAnimation);
}
}
@Override
public void onAnimationEnd(Animation animation) {
group.removeView(imgshow);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
}
}
结果是:实现动画,并在动画结束后移除动画
9.通过XML设置动画(必然是首选)
10.通过XML设置alpha动画
1、在xml中配置动画各种属性
创建alpha.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="3000"/>
</set>
2、创建布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/group"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imgshow"
android:src="@drawable/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
3、使用AnimationUtil类读取动画配置
public class MainActivity extends AppCompatActivity {
private ImageView imgshow=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgshow=findViewById(R.id.imgshow);
imgshow.setOnClickListener(new OnclickListenerImpl());
}
private class OnclickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.alpha);
imgshow.startAnimation(animation);
}
}
}
结果:实现动画效果
11.通过XML设置scale动画
1、创建scale.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0"
android:toXScale="0.0"
android:fromYScale="1.0"
android:toYScale="0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="100"
android:repeatCount="3"
android:duration="3000"/>
</set>
2、activity文件
public class MainActivity extends AppCompatActivity {
private ImageView imgshow=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgshow=findViewById(R.id.imgshow);
imgshow.setOnClickListener(new OnclickListenerImpl());
}
private class OnclickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale);
imgshow.startAnimation(animation);
}
}
}
12.通过XML设置tanslate动画
1、创建translate.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0.0"
android:toXDelta="50%"
android:fromYDelta="0.0"
android:toYDelta="150%"
android:duration="3000"/>
</set>
2、activity文件
public class MainActivity extends AppCompatActivity {
private ImageView imgshow=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgshow=findViewById(R.id.imgshow);
imgshow.setOnClickListener(new OnclickListenerImpl());
}
private class OnclickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale);
imgshow.startAnimation(animation);
}
}
}
结果:
实现动画效果
13.通过XML设置rotate动画
1、创建rotate.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0.0"
android:toXDelta="50%"
android:fromYDelta="0.0"
android:toYDelta="150%"
android:duration="3000"/>
</set>
2、activity文件
public class MainActivity extends AppCompatActivity {
private ImageView imgshow=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgshow=findViewById(R.id.imgshow);
imgshow.setOnClickListener(new OnclickListenerImpl());
}
private class OnclickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.rotate);
imgshow.startAnimation(animation);
}
}
}
结果:
实现动画效果
13.通过XML设置动画叠加(旋转加位移)
实际上就是在set节点上添加多个动画效果
1、创建all.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:fromDegrees="0.0"
android:toDegrees="360"
android:pivotX="50%p"
android:pivotY="0"
android:duration="3000"/>
<translate
android:fromXDelta="0.0"
android:toXDelta="50%"
android:fromYDelta="0.0"
android:toYDelta="150%"
android:duration="3000"/>
</set>
2、activity文件
public class MainActivity extends AppCompatActivity {
private ImageView imgshow=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgshow=findViewById(R.id.imgshow);
imgshow.setOnClickListener(new OnclickListenerImpl());
}
private class OnclickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.all);
imgshow.startAnimation(animation);
}
}
}
结果:
实现动画效果
14.通过XML设置动画速率(针对全部动画)
1、创建all.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="acclerate_interprolator"
android:shareInterpolator="true" >
<rotate
android:fromDegrees="0.0"
android:toDegrees="360"
android:pivotX="50%p"
android:pivotY="0"
android:duration="3000"/>
<translate
android:fromXDelta="0.0"
android:toXDelta="50%"
android:fromYDelta="0.0"
android:toYDelta="150%"
android:duration="3000"/>
</set>
2、activity文件
public class MainActivity extends AppCompatActivity {
private ImageView imgshow=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgshow=findViewById(R.id.imgshow);
imgshow.setOnClickListener(new OnclickListenerImpl());
}
private class OnclickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.all);
imgshow.startAnimation(animation);
}
}
}
结果:
实现动画效果
15.FrameAnimation帧动画
1、定义动画的配置文件,放在drawable文件夹下,里面有15张图片
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/banana01" android:duration="100"/>
<item android:drawable="@drawable/banana02" android:duration="100"/>
<item android:drawable="@drawable/banana03" android:duration="100"/>
<item android:drawable="@drawable/banana04" android:duration="100"/>
<item android:drawable="@drawable/banana05" android:duration="100"/>
<item android:drawable="@drawable/banana06" android:duration="100"/>
<item android:drawable="@drawable/banana07" android:duration="100"/>
<item android:drawable="@drawable/banana08" android:duration="100"/>
<item android:drawable="@drawable/banana09" android:duration="100"/>
<item android:drawable="@drawable/banana10" android:duration="100"/>
<item android:drawable="@drawable/banana11" android:duration="100"/>
<item android:drawable="@drawable/banana12" android:duration="100"/>
<item android:drawable="@drawable/banana13" android:duration="100"/>
<item android:drawable="@drawable/banana14" android:duration="100"/>
<item android:drawable="@drawable/banana15" android:duration="100"/>
</animation-list>
2、定义布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/group"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/face"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/start"
android:text="start animation"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
3、activity文件
public class MainActivity extends AppCompatActivity {
private ImageView face=null;
private Button startAnimation=null;
private AnimationDrawable animationDrawable = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
face=findViewById(R.id.face);
startAnimation=findViewById(R.id.start);
startAnimation.setOnClickListener(new OnclickListenerImpl());
}
private class OnclickListenerImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
face.setBackgroundResource(R.drawable.allface);
animationDrawable= (AnimationDrawable) face.getBackground();
animationDrawable.setOneShot(false);//是否只播1次
animationDrawable.start();
}
}
}
结果:
实现15张图依次播放效果
16.组件上使用动画(LayoutAnimationController组件)
不看了