帧动画
补间动画
属性动画
帧动画 依赖于资源文件
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item
android:drawable="@drawable/gif1"
android:duration="100"/>
<item
android:drawable="@drawable/gif2"
android:duration="100"/>
<item
android:drawable="@drawable/gif3"
android:duration="100"/>
</animation-list>
其中 oneshot=false 表示一直循环
item下的 duration=100 是本张图片显示时长
ImageView iv = findViewById(R.id.iv);
iv.setImageResource(R.drawable.gif_list);
AnimationDrawable animationDrawable = (AnimationDrawable) iv.getDrawable();
animationDrawable.start();
补间动画
需要在res下新建anim文件夹,在建立动画资源文件,否则找不到补间动画的标签
补间动画只是视觉改变了控件的位置,其控件的本身位置不发生改变的.
渐变alpha
500毫秒从不透明到完全透明
<!-- fromAlpha和toAlpha是起始透明度和结束时透明度 -->
<!--startOffset 动画延迟的时间,多久后开始执行动画效果,int型,毫秒为单位。-->
<!--duration 动画的时长,int类型,以毫秒为单位,默认为300毫秒。-->
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:startOffset="800"
android:duration="500"/>
旋转rotate
800毫秒以中心点正向旋转540度
<!--fromDegrees:开始的角度
toDegrees:结束的角度,+表示是正的
pivotX:用于设置旋转时的x轴坐标
pivotY:用于设置旋转时的y轴坐标
pivotyX和pivotyY为纯数字时表示使用绝对位置定位
为百分之多少时表示使用相对于控件本身定位
百分之P结尾时表示使用相对于控件的父控件定位
-->
<rotate
android:fromDegrees="0"
android:toDegrees="540"
android:pivotX="50%"
android:pivotY="50%"
android:duration="800"/>
缩放scale
800毫秒XY分别向中心点缩放一半
<scale
android:duration="800"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="0.5"
android:toYScale="0.5" />
位移translate
2秒时间向右平移百分之百
<translate
android:duration="2000"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:toXDelta="100%"
android:toYDelta="0%" />
最后用这个AnimationUtils工具类得到我们的动画,设置给控件
ImageView iv2 = findViewById(R.id.iv2);
Animation animation2 = AnimationUtils.loadAnimation(Fab2Activity.this, R.anim.anims);
iv2.setAnimation(animation2);
属性动画
属性动画作用于对象,控制对象的属性展示出动画.所以补间动画能实现的属性动画也可以实现.
同时属性动画真实改变了view的位置.
final Button b = findViewById(R.id.b);
ValueAnimator valueAnimator = ValueAnimator.ofInt(500,200);
valueAnimator.setDuration(1000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int animatedValue = (int) animation.getAnimatedValue();
Log.d("////",animatedValue + "");
b.getLayoutParams().width = animatedValue;
b.requestLayout();
}
});
valueAnimator.start();
我们通过ValueAnimator.ofInt(500,200)得到valueAnimator;并且增加UpdateListener监听得到每次回调得到数值并给对象属性赋值,通过Log可以看出来 这个ValueAnimator是操作数值的一个东西,每次回调的数值间隙与设置的setDuration(1000)有关

final Button b = findViewById(R.id.b);
ValueAnimator valueAnimator1 = ValueAnimator.ofFloat(1.0f,200.0f,0.0f);
valueAnimator1.setDuration(1000);
valueAnimator1.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Float animatedValue = (Float) animation.getAnimatedValue();
Log.d("/////",animatedValue + "");
b.setX(animatedValue);
}
});
valueAnimator1.start();
ValueAnimator.ofFloat和ofInt 只有值的区别
2428

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



