android view动画类型

本文详细介绍了Android中实现滑动动画的三种方式:通过View自带的scrollBy()和scrollTo()方法、通过动画给View施加平移效果及通过改变View的LayoutParams。每种方式都附带了具体的实现代码,并指出了它们的适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android中的view共有以下形式实现动画:
1. 通过view自带的方法scrollBy()和scrollTo()实现滑动;
2. 通过动画给view施加平移效果以实现滑动;
3. 通过改变view的layoutparams,从而改变view的布局实现滑动。

首先,针对第一种,我们看下scrollBy()和scrollTo()的源码:

public void scrollTo(int x,int y){
    if(mScrollX != x || mScrollY != y ){
        int oldX = mScrollX;
        int oldY = mScrollY;
        mScrollX = x;
        mScrollY = y;
        invalidateParentCaches();
        onScrollChanged(mScrollX,mScrollY,oldX,oldY);
        if(!awakenScrollBars){
            postInvalidateOnAnimation();
        }
    }
}

public void scrollBy(int x, int y){
    scrollTo(mScrollX+x,mScrollY+y);
}

由此可见,scrollTo()实现了view基于当前位置的绝对滑动,scrollBy()实现了view基于当前位置的相对滑动;而且,使用scrollTo()和scrollBy(),只能将view的内容进行滑动,但不能将view本身进行移动。
适用场景:
只是想让view产生滑动效果,并不会对view注册点击事件。

其次,我们来看下使用动画实现view的平移效果:
在anim文件夹下创建文件move.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:adjustment="normal">
<translate
android:duration="100"
android:fromXDelta="0"
android:fromYDelta="0"
android:interpolator="@android:anim/linear_interpolator"
android:toXDelta="100"
android:toYDelta="100"/>

然后在java文件中调用

Animation animation = AnimationUtils.loadAnimation(context, R.anim.move);
targetView.startAnimation(animation);

上述表示将一个view在100ms内从位置(0,0)平移到位置(100,100).而android 3.0则使用了更简单的属性动画

ObjectAnimation.ofFloat(tartgetView,"translateX",0,100).setDuretion(100).start();

鉴于现在很多app都要兼容到2.2版本,可以使用nineOldAndroid动画兼容包实现属性动画.
使用场景:
操作简单,使用于没有交互的view,和实现复杂的动画效果。

最后,我们来看下改变view的layoutparams来实现view的滑动:

MarginLayoutParams layoutParams = (MarginLayoutParams)targetView.getLayoutParams();
layoutParams.width += 100;
layoutParmas.height += 100;
targetView.requestLayout(); //等同于 targetView.setLayoutParams(layoutParams);

使用场景:
操作稍显复杂,不仅改变了view的内容,也改变了view本身,适用于有交互的view。

不管android能实现多么炫丽的动画效果,都是基于这三种来的,熟悉android的动画原理,能让我们更加了解android的动画!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值