Android 动画详解之属性动画(Property Animation)(下)

Hello,大家好,最近好长时间没有写博客了,因为我决定辞职了。

废话不多说,我们还是来看属性动画在上一篇Android 动画详解之属性动画(Property Animation)中我们简单的介绍了一下属性动画的用法,其实属性动画还有更多有趣的用法。

1,在xml中使用

在eclipse中我们右键新建xml可以选择新建属性动画,如图

我们选择objectAnimator,然后我们就会看到熟悉的一幕

然后我们用智能提示就可以看到更熟悉的

没错,这下我们应该知道怎么用xml布局来写属性动画了吧

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:propertyName="Rotation"
    android:valueFrom="0"
    android:valueTo="360"
    android:valueType="floatType"
     >

</objectAnimator></span>
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_animation);
		button = (Button) findViewById(R.id.btn_anim);
		button.setOnClickListener(new OnClickListener() {

			@SuppressLint("NewApi")
			@Override
			public void onClick(View v) {
				Animator animator = AnimatorInflater.loadAnimator(
						AnimationActivity.this, R.animator.animation);
				animator.setTarget(button);
				animator.start();
			}
		});
	}

效果

同时我们可以看到在新建xml的时候是有set的,set的用法同样很简单

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially" >
<!-- ordering="together"同时播放
     ordering="sequentially"次序播放
 -->
    <objectAnimator />
    <objectAnimator />
</set>

2,布局动画

当容器中的视图层次发生变化时存在过渡的动画效果,这个我们先来看看ApiDemo的效果。

可以看到我们勾选了in于out之后我们新增的button或者remove掉的button会有一个动画效果,接下来我们来看代码

 // Check for disabled animations
        CheckBox appearingCB = (CheckBox) findViewById(R.id.appearingCB);
        appearingCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                setupTransition(transitioner);
            }
        });
        CheckBox disappearingCB = (CheckBox) findViewById(R.id.disappearingCB);
        disappearingCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                setupTransition(transitioner);
            }
        });

这是俩个checkbox,我们再看setupTransition方法

	private void setupTransition(LayoutTransition transition) {
        CheckBox customAnimCB = (CheckBox) findViewById(R.id.customAnimCB);
        CheckBox appearingCB = (CheckBox) findViewById(R.id.appearingCB);
        CheckBox disappearingCB = (CheckBox) findViewById(R.id.disappearingCB);
        CheckBox changingAppearingCB = (CheckBox) findViewById(R.id.changingAppearingCB);
        CheckBox changingDisappearingCB = (CheckBox) findViewById(R.id.changingDisappearingCB);
        transition.setAnimator(LayoutTransition.APPEARING, appearingCB.isChecked() ?
                (customAnimCB.isChecked() ? customAppearingAnim : defaultAppearingAnim) : null);
        transition.setAnimator(LayoutTransition.DISAPPEARING, disappearingCB.isChecked() ?
                (customAnimCB.isChecked() ? customDisappearingAnim : defaultDisappearingAnim) : null);
        transition.setAnimator(LayoutTransition.CHANGE_APPEARING, changingAppearingCB.isChecked() ?
                (customAnimCB.isChecked() ? customChangingAppearingAnim :
                        defaultChangingAppearingAnim) : null);
        transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING,
                changingDisappearingCB.isChecked() ?
                (customAnimCB.isChecked() ? customChangingDisappearingAnim :
                        defaultChangingDisappearingAnim) : null);
    }

我们可以发现关键就是LayoutTransition,而且动画产生也是依据

LayoutTransition.APPEARING;

LayoutTransition.DISAPPEARING;

LayoutTransition.CHANGE_APPEARING;

LayoutTransition.CHANGE_DISAPPEARING;

APPEARING新增view的动画CHANGE_APPEARING对布局产生改变的动画,那么我们就可以依葫芦画瓢。

 private RelativeLayout relativeLayout;
   private Button mAdbtn;
   private int count = 0;
	@SuppressLint("NewApi")
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_animation);
		relativeLayout = (RelativeLayout)findViewById(R.id.relative);
		mAdbtn = (Button)findViewById(R.id.btn);
		final GridLayout gridLayout = new GridLayout(this);
		gridLayout.setColumnCount(5);
		relativeLayout.addView(gridLayout);
		gridLayout.setLayoutTransition(new LayoutTransition());
		mAdbtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				count++;
               Button button = new Button(AnimationActivity.this);
               button.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
                gridLayout.removeView(v);
				}
			});
               button.setText("btn"+count);
               gridLayout.addView(button);
			}
		});
	}

效果

同时如果我们不喜欢默认的动画效果也可以替换为自己喜欢的效果。

	mAdbtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				count++;
				Button button = new Button(AnimationActivity.this);
				button.setOnClickListener(new OnClickListener() {

					@Override
					public void onClick(View v) {
						gridLayout.removeView(v);
					}
				});
				button.setText("btn" + count);
				layoutTransition.setAnimator(LayoutTransition.APPEARING,
						ObjectAnimator.ofFloat(button, "RotationX", 0, 360).setDuration(2000));
				gridLayout.setLayoutTransition(layoutTransition);
				gridLayout.addView(button);
			}
		});

ok,属性动画就介绍到这里吧,也预祝大家都工作顺利天天开心

时间: 2024-10-20 20:48:39

Android 动画详解之属性动画(Property Animation)(下)的相关文章

Android 动画详解之属性动画(Property Animation)

转载请注明http://blog.csdn.net/u014163726/article/details/41210951 前文也提到过Android 3.0以后引入了属性动画,属性动画可以轻而易举的办到许多View动画做不到的事,今天我们就来学习一下属性动画. 前文提到过View动画只是改变了View的绘制效果,而属性动画则是真正的改变一个属性,效果如下图. 对比Android 动画详解之View动画我们可以看到明显的区别,那么属性动画究竟是怎么用的呢,莫慌,接下来代码奉上. 1,Object

android动画详解四 创建动画

· 使用ValueAnimator进行动画 通过指定一些int, float或color等类型的值的集合,ValueAnimator 使你可以对这些类型的值进行动画.你需通过调用ValueAnimator 的某个工厂方法来获得一个ValueAnimator 对象,比如:ofInt(), ofFloat(), 或 ofObject().例如: ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f); animation.setDuration

Android 动画详解之Frame动画 (Drawable Animation)

Frame动画就像是gif图,通过一些静态图片来达到动画的效果. Android sdk中的AnimationDrawable就是专门针对Frame动画,当然Frame动画也可在java代码或者xml中写,但是提倡大家还是在xml中写,先上个效果图. <span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <animation-list

Animation动画详解(十)——联合动画的XML实现与使用示例

前言: 上篇给大家讲了有关AnimatorSet的代码实现方法,这篇我们就分别来看看如何利用xml来实现ValueAnimator.ObjectAnimator和AnimatorSet; 在文章最后,将利用AnimatorSet来实现一个路径动画,效果图如下: (这里实现的是一个动画菜单,在点击菜单按钮时,弹出各个菜单)

android动画详解三 动画API概述

· 属性动画与view动画的不同之处 view动画系统提供了仅动画View 对象的能力,所以如果你想动画非View 对象,你就要自己实现代码. view动画系统实际上还被强制仅能对 View 的少数属性进行动画,比如缩放和旋转,而不能对背景色进行. view动画的另一个坏处是它仅修改View的绘制位置,而不是View的实际位置.例如,如果你动画一个移动穿越屏幕,button的绘制位置是正确的,但实际你可以点击它的位置却没有变,所以你必须去实现你自己的逻辑来处理它. 使用属性动画系统时,这个限制被

Animation动画详解(十一)——layoutAnimation与gridLayoutAnimation

前言:人或许天生是懒惰的,明知道的不足,却不努力弥补. 相关博客: 1.<Animation 动画详解(一)--alpha.scale.translate.rotate.set的xml属性及用法> 2.<Animation动画详解(二)--Interpolator插值器> 3.<Animation动画详解(三)-- 代码生成alpha.scale.translate.rotate.set及插值器动画> 4.<Animation动画详解(四)--ValueAnima

Android图文详解属性动画

Android中的动画分为视图动画(View Animation).属性动画(Property Animation)以及Drawable动画.从Android 3.0(API Level 11)开始,Android开始支持属性动画,本文主要讲解如何使用属性动画.关于视图动画可以参见博文<Android四大视图动画图文详解>. 概述 视图动画局限比较大,如下所述: 视图动画只能使用在View上面. 视图动画并没有真正改变View相应的属性值,这导致了UI效果与实际View状态存在差异,并导致了一

属性动画详解一(Property Animation)

效果图: Android动画有两类: 1.View Animation(Frame Animation,Tween Animation) 2.Property Animation 其中,上述效果是用第二类属性动画做的. 什么是属性动画? 通俗的说,属性动画就是在一定的时间内,按照一定的规律来改变对象的属性(该属性对于该对象应该是从形态(大小,位置等)上可以感受到的),从而是对象展现出动画的效果. 作用:可以定义动画来改变对象的属性( You can define an animation to

android之属性动画和布局动画详解

1.属性动画是什么不废话,不懂的可以百度一下参考郭霖大神的动画详解篇:这里仅仅提供一个demo说说用法,抛砖引玉,代码的注释写的已经很详细,不再多说废话,一下提供的是一个基础的demo,讲解的是objectAnimator的基础用法,如平移.旋转.缩放.渐变以及动画的集合:至于objectAnimator(必须的有set get方法)和valueAnimator的详细区别也可参考郭霖大神的动画详解篇 2.除此基本用法,还有估值器和插值器 (1)插值器:动画速率的变换,有点类似物理的加速度,就是该