Android中的三种动画
来源:互联网 发布:seo自学网haiyaoseo 编辑:程序博客网 时间:2024/05/16 12:06
● tween 补间动画:通过指定View的初末状态和变化时间、方式,对View的内容完成一系列的图形变换来实现动画效果。
Alpha(透明),Scale(缩放),Translate(平移),Rotate(旋转),Set。
● frame 帧动画:AnimationDrawable 控制 animation-list xml布局。
● PropertyAnimation: 属性动画
一.补间(View)动画Tween Animation:(透明,旋转,缩放,平移,动画集合).
创建方式2种
<1>.java代码:
//fromXType:
//Animation.RELATIVE_TO_SELF:0.5f—>控件自身x轴的起点值+0.5*自身的宽度
//Animation.RELATIVE_TO_PARENT,0.5f—>自身起点的值+0.5*控件父窗体的宽度
RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 1f, Animation.RELATIVE_TO_SELF, 1f);
ra.setDuration(3000);
ra.setRepeatCount(2);
ra.setRepeatMode(Animation.REVERSE);
ra.setFillAfter(true);
ivHouzi.startAnimation(ra);
动画集合:
//参数:是否共用同一个插值器效果.
AnimationSet set = new AnimationSet(true);
set.addAnimation(ta);
<2>.xml文件:
在res目录下建立一个anim文件夹,然后建立对应的xml文件.
“`
补间动画的监听:
sa1.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
//动画开始
}
@Override public void onAnimationEnd(Animation animation) { //动画结束 if (ivA.getVisibility() == View.VISIBLE) { ivA.setAnimation(eB(); ivnull); showImagB.startAnimation(sa2); }else{ ivB.setAnimation(null); showImageA(); ivA.startAnimation(sa2); } } @Override public void onAnimationRepeat(Animation animation) { //动画重复 } });
二.帧动画Frame Animation:步骤:①.建立一个drawable-hdpi文件夹,放置多张图片;②.在**drawable**目录,建立一个xml文件,该文件的根节点,**animation-list.** 在这个文件中,写多个item:drawable和duration.③.把这个xml文件作为某个控件的**background**.(以控件的background形式引用)④.在java代码中,AnimationDrawable drawable=(AnimationDrawable)iv.getBackground(); drawable.start(); //drawable.stop(); 三.属性动画(Property Animation): 通过**改变控件自身的属性**,来使得该控件动起来. 使用方法:<1>.java代码创建: ObjectAnimator alpha = ObjectAnimator.ofFloat(ivShow, "alpha", 0, 0.2f, 0, 0.4f, 0, 0.8f, 1); alpha.setRepeatCount(2); alpha.setDuration(3000); alpha.start();<2>.xml文件创建: 在res/文件夹下,创建一个**animator**文件夹,然后创建一个根节点是objectAnimator的xml文件. //加载一个动画资源 Animator animator = AnimatorInflater.**loadAnimator**(this, R.animator.trans_animator); //动画的执行目标 animator.setTarget(ivShow); //2秒后开始执行 //animator.setStartDelay(2000); animator.start(); 属性动画的监听方法: ①.监听动画的执行过程:如果传递的参数是new AnimatorListener(),需要重写四个方法
alpha.addListener(new Animator.AnimatorListener(){
@Overridepublic void onAnimationStart(Animator animation) {}@Overridepublic void onAnimationEnd(Animator animation) {}@Overridepublic void onAnimationCancel(Animator animation) {}@Overridepublic void onAnimationRepeat(Animator animation) {}
});
“`
如果传递的参数是new AnimatorListenerAdapter(),可以选择要重写哪个方法
animator.addListener(new AnimatorListenerAdapter() {
@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) {
//判断动画是否被取消了…API19之后才有
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);
}
});
- Android中的三种动画
- Android中的动画(三)属性动画
- Android 三种动画
- android三种动画
- Android 三种常见动画
- Android 三种动画详解
- Android 三种动画详解
- 浅析 - Android三种动画
- Android的三种动画
- Android三种动画详解
- Android 三种动画详解
- Android 三种动画详解
- Android 三种动画详解
- Android 三种动画详解
- Android 三种动画详解
- Android 三种动画详解
- android中的四种动画
- Android动画(三):属性动画
- 小C语言--词法分析程序
- AIDL使用以及原理分析
- 治大国犹如烹小鲜
- HDU 2665 Kth number 主席树模板题
- 日记10月12日
- Android中的三种动画
- POJ 3096
- ubuntu1604LTS制作本地源
- ubuntu系统中两个版本的python
- HDU 5918 Sequence I (水题+字符串匹配)
- js中的事件绑定与解绑
- 静态函数的好处
- Codeforces 629C Famil Door and Brackets【dp】
- C++函数指针point