补间动画
1.作用对象
安卓视图控件(view)
2.效果
1.平移动画:对应TranslateAnimation类
2.缩放动画:对应ScaleAnimation类
3.旋转动画:对应RotateAnimation类
4.透明度动画:对应AlphaAnimation类
3.具体使用
使用方式
首先介绍在xml文件中设置动画效果的公有属性
android:duration = "3000" 动画持续时间(ms)
android:startOffset = "0" 动画延迟开始时间(ms)
android:fillBefore = "true" 动画播放完后,视图是否会停留在动画开始的状态,默认为true
android:fillAfter = "false" 动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为false
android:fillEnabled = "true" 是否应用fillBefore值,对fillAfter值无影响,默认为true
android:repeatMode = "restart" 选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restart
android:repeatCount = "1" 重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复
以上是在xml文件中设置动画的共有属性,其中第一个必须设置,否则不会出现动画效果,其他都是可选的
xml文件中设置:
在res/anim文件目录下创建xml文件,即为动画效果的文件,如果没有anim文件夹,则需要自行创建一个目录。,接着在创建的xml文件中使用共有属性以及自身的特有属性
代码中动态设置:
在创建动画对象时,设置自身的特有属性,想使用共有属性时,在上面的属性前加上“set”即可,例如translateAnimation.setDuration(3000);
便是设置了android:duration = "3000"
使用介绍
1.1平移动画(xml)
特有属性
android:fromXDelta = "0" 起始x位置
android:toXDelta = "800" 结束x位置
android:fromYDelta = "0" 起始y位置
android:toYDelta = "800" 结束y位置
示例
xml文件
<?xml version="1.0" encoding="utf-8"?>
<!--采用translate标签表示平移动画-->
<!--前面部分是共有属性,后四个是平移动画特有属性-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration = "3000"
android:startOffset = "0"
android:fillBefore = "true"
android:fillAfter = "false"
android:fillEnabled = "true"
android:repeatMode = "restart"
android:repeatCount = "0"
android:fromXDelta = "0"
android:toXDelta = "800"
android:fromYDelta = "0"
android:toYDelta = "800"
/>
Activity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//创建需要设置动画的视图
Button button = findViewById(R.id.translate);
//创建动画对象,并传入设置的动画效果xml文件
Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.view_animation);
//播放动画
button.startAnimation(translateAnimation);
setContentView(R.layout.activity_main);
}
1.2平移动画(代码动态设置)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//创建需要设置动画的视图
Button translateButton = findViewById(R.id.translate);
//创建平移动画的对象:平移动画对应的Animation子类为TranslateAnimation
Animation translateAnimation = new TranslateAnimation(0, 500, 0, 500);
//anim中固定属性值前加“set”,设置共有属性
translateAnimation.setDuration(3000);
//播放动画
translateButton.startAnimation(translateAnimation);
}
2.1缩放动画(xml)
特有属性
android:fromXScale="0.5" 表示动画在水平方向X的起始缩放倍数
android:toXScale="1.5" 表示动画在水平方向X的结束缩放倍数
android:fromYScale="0.5" 表示动画在水平方向Y的起始缩放倍数
android:toYScale="1.5" 表示动画在水平方向Y的结束缩放倍数
android:pivotX="30%"
android:pivotY="30%"
/>
<!--0.0表示收缩到没有;1.0表示正常无伸缩;大于1.0表示放大-->
<!--pivot可取值为数字,百分比,或者百分比p
设置数字时,轴点为View的左上角的原点在x和y方向加上设置数字dp的值的点。
设置为百分比时,轴点为View的左上角的原点在x和y方向分别加上自身xy乘设置百分比的点。
设置为百分比p时,轴点为View的左上角的原点在x和y方向分别加上父控件xy乘设置百分比的点。
-->
示例
xml文件
<?xml version="1.0" encoding="utf-8"?>
<!--采用scale标签表示缩放动画-->
<!--前面部分是共有属性,后六个是平移动画特有属性-->
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration = "3000"
android:startOffset = "0"
android:fillBefore = "true"
android:fillAfter = "false"
android:fillEnabled = "true"
android:repeatMode = "restart"
android:repeatCount = "0"
android:interpolator = "@android:anim/overshoot_interpolator"
android:fromXScale="0.5"
android:toXScale="1.5"
android:fromYScale="0.5"
android:toYScale="1.5"
android:pivotX="30%"
android:pivotY="30%"
/>
Activity
Button scaleButton = findViewById(R.id.scale);
Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scale_animation);
scaleButton.startAnimation(scaleAnimation);
2.2缩放动画(代码动态设置)
Button scaleButton = findViewById(R.id.scale);
//参数:起始x缩放倍数,结束x缩放倍数,起始y缩放倍数,结束y缩放倍数,轴点x坐标,轴点y坐标
//缩放倍数等于1,正常;小于1,缩放;大于1,放大;
//Animation.RELATIVE_TO_SELF对应xml文件中pivot的百分比
//Animation.ABSOLUTE对应xml文件中pivot的数字
//Animation.RELATIVE_TO_PARENT对应xml文件中pivot的百分比p
Animation scaleAnimation = new ScaleAnimation(0.5f, 1.5f, 0.5f, 1.5f,
Animation.RELATIVE_TO_SELF, 0.3f, Animation.RELATIVE_TO_SELF, 0.3f);
scaleAnimation.setDuration(3000);
scaleButton.startAnimation(scaleAnimation);
3.1旋转动画(xml)
特有属性
android:fromDegrees="0" 动画开始时,视图的旋转角度(正数顺时针;负数逆时针)
android:toDegrees="360" 动画结束时,视图的旋转角度(正数顺时针;负数逆时针)
android:pivotX="50%" 旋转轴点的x坐标
android:pivotY="50%" 旋转轴点的y坐标
/>
<!-- pivot可取值为数字,百分比,或者百分比p
设置数字时,轴点为View的左上角的原点在x和y方向加上设置数字dp的值的点。
设置为百分比时,轴点为View的左上角的原点在x和y方向分别加上自身xy乘设置百分比的点。
设置为百分比p时,轴点为View的左上角的原点在x和y方向分别加上父控件xy乘设置百分比的点。
-->
示例
xml文件
<?xml version="1.0" encoding="utf-8"?>
<!--采用rotate标签表示旋转动画-->
<!--前面部分是共有属性,后四个是平移动画特有属性-->
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration = "3000"
android:startOffset = "0"
android:fillBefore = "true"
android:fillAfter = "false"
android:fillEnabled = "true"
android:repeatMode = "restart"
android:repeatCount = "0"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
/>
Activity
Button rotateButton = findViewById(R.id.rotate);
Animation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate_animation);
rotateButton.startAnimation(rotateAnimation);
3.2旋转动画(代码动态设置)
Button rotateButton = findViewById(R.id.rotate);
//参数:起始角度,结束角度,轴点的x坐标,轴点的y坐标
//Animation.RELATIVE_TO_SELF对应xml文件中pivot的百分比
//Animation.ABSOLUTE对应xml文件中pivot的数字
//Animation.RELATIVE_TO_PARENT对应xml文件中pivot的百分比p
Animation rotateAnimation = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setDuration(3000);
rotateButton.startAnimation(rotateAnimation);
4.1透明度动画(xml)
特有属性
android:fromAlpha="1.0" 动画开始时视图的透明度(取值范围-1~1)
android:toAlpha="0.0" toAlpha:动画结束时视图的透明度(取值范围-1~1)
示例
xml文件
<?xml version="1.0" encoding="utf-8"?>
<!--采用alpha标签表示透明度动画-->
<!--前面部分是共有属性,后两个是平移动画特有属性-->
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration = "3000"
android:startOffset = "0"
android:fillBefore = "true"
android:fillAfter = "false"
android:fillEnabled = "true"
android:repeatMode = "restart"
android:repeatCount = "0"
android:fromAlpha="1.0"
android:toAlpha="0.0"
/>
Activity
Button alphaButton = findViewById(R.id.alpha);
Animation alphaAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha_animation);
alphaButton.startAnimation(alphaAnimation);
4.2透明度动画(代码动态设置)
Button alphaButton = findViewById(R.id.alpha);
//参数:起始和结束的透明度。取值范围-1~1
Animation alphaAnimation = new AlphaAnimation(1,0);
alphaAnimation.setDuration(3000);
alphaButton.startAnimation(alphaAnimation);
5.1组合动画(xml)
示例
xml文件
<?xml version="1.0" encoding="utf-8"?>
<!--采用set标签表示组合动画-->
<!--前面部分是共有属性,后一个是平移动画特有属性-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration = "3000"
android:startOffset = "0"
android:fillBefore = "true"
android:fillAfter = "false"
android:fillEnabled = "true"
android:repeatMode = "restart"
android:repeatCount = "0"
android:shareInterpolator="true">
<rotate
android:duration="1000"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:repeatMode="restart"
android:repeatCount="infinite" />
<translate
android:duration="10000"
android:startOffset = "1000"
android:fromXDelta="-50%p"
android:fromYDelta="0"
android:toXDelta="50%p"
android:toYDelta="0" />
<alpha
android:startOffset="7000"
android:duration="3000"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
<scale
android:startOffset="4000"
android:duration="1000"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="0.5"
android:toYScale="0.5" />
</set>
<!--shareInterpolator表示组合动画是否和集合共享一个插值器,如果集合不指定插值器,那么子动画需要单独设置
组合动画播放时是全部动画同时开始,若想不同的动画在不同时间开始,需分别设定延迟时间-->
Activity
Button animationButton = findViewById(R.id.animation);
Animation animation = AnimationUtils.loadAnimation(this, R.anim.animation);
animationButton.startAnimation(animation);
5.2组合动画(代码动态设置)
//创建视图对象
Button animationButton = findViewById(R.id.animation);
//创建动画对象
AnimationSet animation = new AnimationSet(true);
//设置组合属性
animation.setRepeatMode(Animation.RESTART);
animation.setRepeatCount(1);//由于旋转动画设置了无限循环,所以该语句循环一次,无效
//设置子动画:平移动画
Animation translate = new TranslateAnimation(TranslateAnimation.RELATIVE_TO_PARENT,-0.5f,
TranslateAnimation.RELATIVE_TO_PARENT,0.5f,
TranslateAnimation.RELATIVE_TO_SELF,0
,TranslateAnimation.RELATIVE_TO_SELF,0);
translate.setDuration(10000);
//设置子动画:缩放动画
Animation scale1 = new ScaleAnimation(1,0.5f,1,0.5f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
scale1.setDuration(1000);
scale1.setStartOffset(4000);
//设置子动画:旋转动画
Animation rotate = new RotateAnimation(0,360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
rotate.setDuration(1000);
rotate.setRepeatMode(Animation.RESTART);
rotate.setRepeatCount(Animation.INFINITE);//表示无限循环
//设置子动画:透明度动画
Animation alpha = new AlphaAnimation(1,0);
alpha.setDuration(3000);
alpha.setStartOffset(7000);
//将子动画添加到组合动画
animation.addAnimation(translate);
animation.addAnimation(scale1);
animation.addAnimation(rotate);
animation.addAnimation(alpha);
animationButton.startAnimation(animation);
4.应用场景
在activity进行启动,跳转,退出时使用
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
//参数:enterAnim,exitAnim
// enterAnim:从Activity a跳转到Activity b,进入b时的动画效果资源ID
// exitAnim:从Activity a跳转到Activity b,离开a时的动画效果资源Id
overridePendingTransition(R.anim.translate_animation, R.anim.rotate_animation);
//系统自带的enterAnim,exitAnim资源ID为android.R.anim.xxx
//overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);//淡入淡出
//overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);//从左向右
//overridePendingTransition()必须要在startActivity(intent)后被调用才能生效
Fragment切换时使用
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
//setTransition(int transit)进行设置系统动画
fragmentTransaction.setTransition(int transit);
// transit参数说明
// 1. FragmentTransaction.TRANSIT_NONE:无动画
// 2. FragmentTransaction.TRANSIT_FRAGMENT_OPEN:标准的打开动画效果
// 3. FragmentTransaction.TRANSIT_FRAGMENT_CLOSE:标准的关闭动画效果
//etCustomAnimations进行设置自定义动画
//fragmentTransaction.setCustomAnimations(R.anim.translate_animation,R.anim.rotate_animation);
以上内容皆为参考Carson_Ho大神的博客,自己看着博客进行操作过一遍,目前我也是在学习,有错误或看不懂的,请参看大神原文,附上大神原文链接
来源:CSDN
作者:zou_sen
链接:https://blog.csdn.net/zou_sen/article/details/104494340