android补间动画有哪几种,android三种动画详解(补间动画、帧动画、属性动画)...

一.补间(View)动画Tween Animation:(平移,透明,旋转,缩放,动画集合).

创建方式2种

<1>.通过java代码创建补间动画:

//fromXType:

//Animation.RELATIVE_TO_SELF:0.5f--->控件自身x轴的起点值+0.5*自身的宽度

//Animation.RELATIVE_TO_PARENT,0.5f--->自身起点的值+0.5*控件父窗体的宽度

TranslateAnimation ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1.5f, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0);

//TranslateAnimation ta = new TranslateAnimation(0, 300, 0, -200);

ra.setDuration(3000); 动画的执行时间

ra.setRepeatCount(2); 设置重复的次数.

ra.setRepeatMode(Animation.REVERSE); RESTART重新开始/反转模式

ra.setFillAfter(true); 保持结束时的状态

ra.setInterpolator(new BounceInterpolator()); 特效

ivHouzi.startAnimation(ra); 开始动画

AlphaAnimation aa = new AlphaAnimation(0, 0.8f);

RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 1f, Animation.RELATIVE_TO_SELF, 1f);

ScaleAnimation sa = new ScaleAnimation(1, 2, 1, 3, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

动画集合:

TranslateAnimation ta = new TranslateAnimation(0, 300, 0, -200);

AlphaAnimation aa = new AlphaAnimation(0, 0.8f);

....

AnimationSet set = new AnimationSet(true); //参数:是否共用同一个插值器效果.

set.addAnimation(aa);

set.addAnimation(ta);

....

ivHouzi.startAnimation(set);

<2>.通过xml文件创建补间动画:

在res目录下建立一个anim文件夹,然后建立对应的xml文件.(translate/set)

android:duration="2000"

android:fromXDelta="0"

android:fromYDelta="0"

android:repeatCount="2"

android:interpolator="@android:anim/anticipate_overshoot_interpolator"

android:toXDelta="200"

android:toYDelta="200">

然后在代码中:

//补间动画资源引用的方式:

Animation ta = AnimationUtils.loadAnimation(this, R.anim.trans_animation);

ivHouzi.startAnimation(ta);

//动画监听

setAnimationListener(new AnimationListener() {

onAnimationStart//动画开始

onAnimationEnd //动画结束

if (ivA.getVisibility() == View.VISIBLE) {

ivA.setAnimation(null); 启动置空

showImageB();

ivB.startAnimation(sa2);

}else{

ivB.setAnimation(null);

showImageA();

ivA.startAnimation(sa2); }

onAnimationRepeat//动画重复

});```

二.帧动画Frame Animation:

可以顺序的播放排列好的图片,来实现类似电影的效果

步骤:

①.建立一个drawable-hdpi文件夹,放置多张图片;

②.在drawable目录,建立一个xml文件,该文件的根节点(类型),animation-list.

在这个文件中,写多个item:drawable和duration.

③.把这个xml文件作为某个控件的background.

④.在java代码中,AnimationDrawable drawable=(AnimationDrawable)iv.getBackground();

drawable.start();

三.属性动画(Property Animation):

通过改变控件自身的属性,来使得该控件动起来.

当属性动画移动后,如果不会到原来的位置,那么点击新的位置,将接受不到Click事件,点击原来的位置可以接收到点击事件

使用方法:

<1>.java代码创建:

ObjectAnimator oa = ObjectAnimator.ofFloat(ivShow, "translationX", 0, 200, 0, 300, 0, 400);

ObjectAnimator alpha = ObjectAnimator.ofFloat(ivShow, "alpha", 0, 0.2f, 0, 0.4f, 0, 0.8f, 1);

ObjectAnimator oaX = ObjectAnimator.ofFloat(ivShow, "rotationX", 0, 360, 0, -360);

ObjectAnimator oaX = ObjectAnimator.ofFloat(ivShow, "scaleX", 1, 4, 1, -4);

alpha.setRepeatCount(2);

alpha.setDuration(3000);

alpha.start();

属性动画的动画集合有多重方式:

AnimatorSet set = new AnimatorSet();

ObjectAnimator transX = ObjectAnimator.ofFloat(ivShow, "translationX", 0, 200, 0, 300, 0, 400);

ObjectAnimator alpha = ObjectAnimator.ofFloat(ivShow, "alpha", 0, 0.2f, 0, 0.4f, 0, 0.8f, 1);

//①.动画序列

//set.playSequentially(transX);

//set.playSequentially(alpha);

//②.动画集合.

// List list=new ArrayList<>();

// list.add(transX);

// list.add(alpha);

// set.playSequentially(list);

//③.playTogether

//set.playTogether(transX, alpha, rotateY, scaleX);

//④.

set.play(transX).with(alpha).after(rotateY).after(scaleX);

set.setDuration(4000);

set.start();

<2>.xml文件创建:

在res/文件夹下,创建一个animator文件夹,然后创建一个根节点(类型)是objectAnimator的xml文件.

//加载一个动画资源

Animator animator = AnimatorInflater.loadAnimator(this, R.animator.trans_animator);创建xml文件

//动画的执行目标

animator.setTarget(ivShow);

//2秒后开始执行

//animator.setStartDelay(2000);

animator.start();

属性动画的监听方法:

①.监听动画的执行过程:

animator.addListener(new AnimatorListenerAdapter() { AnimatorListener

Statr/End/Canal/Repeat(Pause/Resume)

@Override

public void onAnimationEnd(Animator animation) {

super.onAnimationEnd(animation);

Toast.makeText(MainActivity.this, "平移完毕了", Toast.LENGTH_SHORT).show();

}

});

②.监听动画的取消过程:

//判断版本号

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//写数字也行19

//判断动画是否被取消了...

animator.addPauseListener(new Animator.AnimatorPauseListener() {

@Override

public void onAnimationPause(Animator animation) { }

@Override

public void onAnimationResume(Animator animation) { }

});

}

③.监听动画值的改变:

//Animator:"爷爷"

//ValueAnimator:"爹"--->ValueAnimator就相当于是一个"数值生成器".用来产生和管理动画运行时所需要的一些值.

//一般不产生具体的动画效果.

//ObjectAnimator:"孙子"--->在实际的开发过程中,用这个ObjectAnimator来实现具体的动画效果.

//ValueAnimator anim = new ValueAnimator();

ValueAnimator anim = (ValueAnimator) animator;

anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

float value = (float) animation.getAnimatedValue();

Log.i("TAG", "value=" + value);

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值