Android动画框架,让平移动画更添魅力

移动开发 Android
使用startAnimation()​方法时,View的位置在动画结束后会重置为原始位置,除非在动画结束时手动更新View的位置。

使用ObjectAnimator

ObjectAnimator是Android3.0引入的一个强大的动画框架,用于对任何对象的属性进行动画处理。可以使用ObjectAnimator来改变View的translationX和translationY属性来实现View的平移动画。

View view = findViewById(R.id.view);
ObjectAnimator animatorX = ObjectAnimator.ofFloat(view, "translationX", 0f, 100f); // 平移X轴
ObjectAnimator animatorY = ObjectAnimator.ofFloat(view, "translationY", 0f, 50f); // 平移Y轴

AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(animatorX).with(animatorY); // 同时执行X轴和Y轴动画
animatorSet.setDuration(1000); // 设置动画时长
animatorSet.start(); // 开始动画

使用ValueAnimator

ValueAnimator是一个更底层的动画框架,可以在动画过程中生成一系列的值,然后使用这些值来更新View的属性。对于平移动画,通过监听ValueAnimator的值变化更新View的translationX和translationY属性。

ValueAnimator animator = ValueAnimator.ofFloat(0f, 100f); // 生成0到100的值
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        float value = (float) animation.getAnimatedValue();
        view.setTranslationX(value); // 更新View的X轴位置
    }
});
animator.setDuration(1000); 
animator.start();

使用ViewPropertyAnimator

从Android 3.0开始,View类提供了一个animate()方法,返回一个ViewPropertyAnimator对象,可以用来链式调用多个动画方法。

view.animate()
        .translationX(100f) // 平移X轴
        .translationY(50f) // 平移Y轴
        .setDuration(1000) // 设置动画时长
        .start(); // 开始动画

使用XML动画

可以在XML文件中定义动画,并在需要时加载并应用这些动画。

<!-- res/anim/translate_animation.xml -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0%p"
        android:toXDelta="100%p"
        android:fromYDelta="0%p"
        android:toYDelta="50%p"
        android:duration="1000"/>
</set>
Animation animation = AnimationUtils.loadAnimation(this, R.anim.translate_animation);
view.startAnimation(animation);

注意:使用startAnimation()方法时,View的位置在动画结束后会重置为原始位置,除非在动画结束时手动更新View的位置。如果希望View在动画结束后保持在最终位置,可以考虑使用前面提到的ObjectAnimator、ValueAnimator或ViewPropertyAnimator方法。

使用drawBitmap

通过drawBitmap在不同的位置画出图片,适合图片作为平移动画的需求。

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.image);
int width = ScreenUtils.getScreenWidth() - bitmap.getWidth();
//int height = bitmap.getHeight();
//绘制原图
//canvas.drawBitmap(bitmap, 0, 0, paint);
canvas.drawBitmap(bitmap, progress * width / 100, 0, null);
//平移图片
Matrix matrix = new Matrix();
matrix.postTranslate(progress * width / 100, height);
canvas.drawBitmap(bitmap, matrix, null);

责任编辑:武晓燕 来源: 沐雨花飞蝶
相关推荐

2017-03-13 15:00:15

AndroidTransition 动画框架

2012-07-11 15:54:59

canvas

2012-07-13 13:52:54

Canvas

2012-07-13 13:41:35

Canvas

2024-01-19 16:35:00

模型动画

2014-12-19 15:42:33

DragonBones

2014-07-15 10:23:10

Android补间动画

2017-02-07 11:35:26

Android动画蜡烛动画

2010-09-08 09:48:56

Gif播放教程Android

2021-02-21 08:12:24

SVG线条动画Web动画

2012-12-24 13:38:01

iOSUIView

2017-04-27 20:30:33

Android动画技巧

2012-06-14 17:06:38

JavaScript

2021-10-12 11:07:33

动画深度Android

2014-02-17 10:12:11

移动APP动画设计

2010-11-01 09:46:21

ViewAndroid

2014-04-15 09:28:14

移动界面动画效果创意

2021-02-21 07:49:40

Web动画SVG线条动画

2023-02-06 09:31:17

CSSJS 动态

2020-06-22 22:02:20

广电云浪潮
点赞
收藏

51CTO技术栈公众号