`
iaiai
  • 浏览: 2180351 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Animator动画

 
阅读更多
请先从网上下载nineOldAndroids这个jar包.

import org.iaiai.alpha.core.activity.BaseActivity;

import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationSet;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;

import com.lidroid.xutils.view.annotation.ContentView;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.Animator.AnimatorListener;
import com.nineoldandroids.animation.AnimatorSet;
import com.nineoldandroids.animation.ObjectAnimator;

@ContentView(R.layout.main)
public class StartActivity extends BaseActivity {
	
	@ViewInject(R.id.moveLayout)
	private View moveLayout;
	
	@ViewInject(R.id.rootLayout)
	private View rootLayout;
	
	@ViewInject(R.id.hiddenLayout)
	private View hiddenLayout;
	
	@ViewInject(R.id.hiddenTextView)
	private TextView hiddenTextView;
	
	private int mActivePointerId,mLastMotionY;

	@OnClick(R.id.colorLayout)
	public void onColorLayoutOnClick(View view){
		ValueAnimator colorAnim = ObjectAnimator.ofInt(moveLayout, "backgroundColor", /*Blue*/0xff0000ff, /*Red*/0xffff0000);
		colorAnim.setDuration(3000);
		colorAnim.setEvaluator(new ArgbEvaluator());
		colorAnim.setRepeatCount(ValueAnimator.INFINITE);
		colorAnim.setRepeatMode(ValueAnimator.REVERSE);
		colorAnim.start();
	}
	
	@OnClick(R.id.moveLayoutLayout)
	public void onMoveLayoutLayoutOnClick(View view){
		AnimatorSet animationSet = new AnimatorSet();
		
		ObjectAnimator animator1 = ObjectAnimator.ofFloat(moveLayout, "y", 0, 100);
		animator1.setInterpolator(new AccelerateInterpolator());	//在动画开始的地方速率改变比较慢,然后开始加速
		ObjectAnimator animator2 = ObjectAnimator.ofFloat(moveLayout, "scaleX", 1, 0);
		ObjectAnimator animator3 = ObjectAnimator.ofFloat(moveLayout, "scaleY", 1, 0);
		
		ObjectAnimator animator4 = ObjectAnimator.ofFloat(moveLayout, "y", 100, 0);
		animator4.setInterpolator(new DecelerateInterpolator());	//在动画开始的地方快然后慢
		ObjectAnimator animator5 = ObjectAnimator.ofFloat(moveLayout, "scaleX", 0, 1);
		ObjectAnimator animator6 = ObjectAnimator.ofFloat(moveLayout, "scaleY", 0, 1);
		animationSet.playTogether(animator1,animator2,animator3);
		animationSet.play(animator4).after(animator1);
		animationSet.play(animator5).after(animator1);
		animationSet.play(animator6).after(animator1);
		
		animationSet.setDuration(500);
		animationSet.start();
	}
	
	@OnClick(R.id.flipVerticalLayout)
	public void onFlipVerticalOnClick(View view){
		ObjectAnimator.ofFloat(view, "rotationY", 0.0F, 360.0F).setDuration(500).start();
	}
	
	@OnClick(R.id.flipHorizontalLayout)
	public void onFlipHorizontalOnClick(View view){
		ObjectAnimator.ofFloat(view, "rotationX", 0.0F, 360.0F).setDuration(500).start();
	}
	
	@OnClick(R.id.hiddenTextView)
	public void onHiddenTextViewOnClick(View view){
		AnimatorSet animationSet = new AnimatorSet();
		
		ObjectAnimator translationAnimator = ObjectAnimator.ofFloat(hiddenLayout, "translationY", 0.0F, 250F);
		translationAnimator.setDuration(2000);
		
		ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(hiddenLayout, "alpha", 1, 0);
		alphaAnimator.setDuration(500);
		
		animationSet.playTogether(translationAnimator,alphaAnimator);
		animationSet.addListener(new AnimatorListener() {
			@Override
			public void onAnimationStart(Animator animation) {
			}
			@Override
			public void onAnimationRepeat(Animator animation) {
			}
			@Override
			public void onAnimationEnd(Animator animation) {
				hiddenTextView.setVisibility(View.GONE);
			}
			@Override
			public void onAnimationCancel(Animator animation) {
			}
		});
		animationSet.start();
		
//		AnimationSet animationSet = new AnimationSet(true);
//		
//		//透明度
//		AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
//		alphaAnimation.setDuration(1000);
//		animationSet.addAnimation(alphaAnimation);
//		
//		// 放缩
//		ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0, 1,0, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
//		scaleAnimation.setDuration(1000);
//		animationSet.addAnimation(scaleAnimation);
//		
//		// 旋转
//		RotateAnimation rotateAnimation = new RotateAnimation(0, 180,Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
//		rotateAnimation.setDuration(1000);
//		animationSet.addAnimation(rotateAnimation);
//		
//		// 平移
//		TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0f, Animation.RELATIVE_TO_PARENT,0, Animation.RELATIVE_TO_PARENT, 0f,Animation.RELATIVE_TO_PARENT, 1.0f);
//		translateAnimation.setDuration(1000);
//		animationSet.addAnimation(translateAnimation);
//		
//		//以下两个属性设置动画之后显示在停止位置上
//		animationSet.setFillEnabled(true);
//		animationSet.setFillAfter(true);
//		animationSet.setAnimationListener(new AnimationListener() {
//			@Override
//			public void onAnimationStart(Animation animation) {
//			}
//			@Override
//			public void onAnimationRepeat(Animation animation) {
//			}
//			@Override
//			public void onAnimationEnd(Animation animation) {
//				hiddenTextView.setVisibility(View.GONE);
//			}
//		});
//		
//		hiddenLayout.startAnimation(animationSet);
	}
	
	@OnClick(R.id.showTextView)
	public void onShowTextViewOnClick(View view){
		AnimationSet animationSet = new AnimationSet(true);
		
		//透明度
		AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
		alphaAnimation.setDuration(1000);
		animationSet.addAnimation(alphaAnimation);
		
		// 放缩
		ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1, 0,1, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
		scaleAnimation.setDuration(1000);
		animationSet.addAnimation(scaleAnimation);
		
		// 旋转
		RotateAnimation rotateAnimation = new RotateAnimation(180, 0,Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
		rotateAnimation.setDuration(1000);
		animationSet.addAnimation(rotateAnimation);
		
		// 平移
		TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0f, Animation.RELATIVE_TO_PARENT,0, Animation.RELATIVE_TO_PARENT, 1.0f,Animation.RELATIVE_TO_PARENT, 0f);
		translateAnimation.setDuration(1000);
		animationSet.addAnimation(translateAnimation);
		
		//以下两个属性设置动画之后显示在停止位置上
		animationSet.setFillEnabled(true);
		animationSet.setFillAfter(true);
		animationSet.setAnimationListener(new AnimationListener() {
			@Override
			public void onAnimationStart(Animation animation) {
				hiddenTextView.setVisibility(View.VISIBLE);
			}
			@Override
			public void onAnimationRepeat(Animation animation) {
			}
			@Override
			public void onAnimationEnd(Animation animation) {
			}
		});
		
		hiddenLayout.startAnimation(animationSet);
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		moveLayout.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent ev) {
				final int action = ev.getAction();
				switch (action & MotionEvent.ACTION_MASK) {
		            case MotionEvent.ACTION_MOVE: {
		            	move(v,ev);
		            	break;
		            }
		            case MotionEvent.ACTION_DOWN: {
		            	mActivePointerId = ev.getPointerId(0);
		            	mLastMotionY = (int) ev.getY(mActivePointerId);
		            	break;
		            }
		            case MotionEvent.ACTION_CANCEL:
		            case MotionEvent.ACTION_UP:
		            	mActivePointerId = -1;
		            	break;
				}
				
				return true;
			}
		});
	}
	
	private void move(View v, MotionEvent ev){
		RelativeLayout.LayoutParams params = (LayoutParams) v.getLayoutParams();
		
		int dy = (int) ev.getY(mActivePointerId) - mLastMotionY;
		int t = params.topMargin+dy;
		
//		/***********这种方式移动会有个问题,当再有其它组件移动时会把原来用此方式移动的所有组件还原到原来的初始位置,也就是用layout没有改变真正的坐标*****************/
//		int dy = (int) ev.getY(mActivePointerId) - mLastMotionY;
//        int l = 0;
//        int t = v.getTop()+dy;
//        int r = v.getRight();
//        int b = v.getBottom() + dy;
//        
////    	v.layout(l, t, r, b);
//    	Log.i("***","l:"+l+"___t:"+t+"___r:"+r+"___b:"+b);	//这种移动
//    	/*****************************/
    	
    	if(t<0){
        	params.topMargin = 0;
        	v.setLayoutParams(params);
    		return;
    	}
    	if(t>(rootLayout.getHeight()-v.getHeight())){
        	params.topMargin = rootLayout.getHeight()-v.getHeight();
        	v.setLayoutParams(params);
    		return;
    	}
    	params.topMargin = t;
    	v.setLayoutParams(params);
	}

}
分享到:
评论

相关推荐

    CTA自动保存项目小工具Cartoon Animator动画软件自动保存项目小工具

    CTA自动保存项目小工具Cartoon Animator动画软件自动保存项目小工具

    animator动画material-ripple

    《Android Animator动画与Material Design Ripple效果详解》 在Android开发中,动画效果是提升用户体验的重要手段,而Animator作为Android提供的一种强大的动画工具,能够帮助开发者实现丰富的动态效果。本篇文章将...

    SolidWorks Animator 动画制作一例

    ### SolidWorks Animator 动画制作精解 SolidWorks Animator 是一款强大的插件,集成于 SolidWorks 软件中,专门用于创建动态演示动画。它不仅简化了产品演示的复杂度,而且增强了产品的视觉吸引力,使得设计师能够...

    Animator动画的录制与回播源码

    Animator动画的录制与回播,方便快捷,只要往前走的动画就能用此代码完成往后退的动画。

    Animator动画按钮拆分播放.doc

    在Unity引擎中,Animator是动画系统的核心组件,用于管理和控制对象的动画状态。Animator控制器是一个复杂的系统,可以处理复杂的动画状态机逻辑,包括过渡、条件触发器和参数控制。在这个场景中,我们看到一个名为...

    动画制作软件easy gif animator

    多个关键字请用空格分隔,最多填写5个。点击右侧Tag快速添加 多个关键字请用空格分隔,最多填写5个。点击右侧Tag快速添加 多个关键字请用空格分隔,最多填写5个。...多个关键字请用空格分隔,最多填写5个。...

    Animator 开场动画 预加载

    总的来说,使用`Animator`创建开场动画结合预加载策略,能够使应用在启动时既有吸引人的视觉效果,又能快速进入可用状态。在实际开发中,需要注意动画的流畅性和预加载的效率,以提供最佳的用户体验。

    SketchUp插件|SU插件|参数动画 Animator_v2.8a.rbz

    Animator(参数动画)是一个专门用于SketchUp模型动画的插件,通过参数化的交互式框架来控制对象和相机沿时间轴的移动。获取生成高质量视频外部工具FFmpeg,可以到免费SU插件下载网站-SU插件百科:...

    Ulead GIF Animator 5教程8动画制作实例

    **Ulead GIF Animator 5教程8动画制作实例详解** 在数字媒体领域,GIF动图是一种广泛使用的格式,尤其在网络和社交媒体上。Ulead GIF Animator 5是一款强大的工具,专为创建、编辑和优化GIF动画设计而生。本教程将...

    做GIF动画原来可以这么简单 EasyGIFAnimator

    标题中的“做GIF动画原来可以这么简单 EasyGIFAnimator”指的是使用名为EasyGIF Animator的软件来创建GIF动画的简易过程。EasyGIF Animator是一款功能强大的GIF动画制作工具,适合那些想要轻松快捷地制作动态图像的...

    Text Animator for Unity 文字动画插件.rar

    《Unity文字动画插件Text Animator详解》 Unity是一款强大的跨平台游戏开发引擎,它提供了丰富的功能,让开发者能够创建各种类型的游戏和交互式体验。在众多的Unity资源中,Text Animator是一个专门针对文字动画...

    animator属性动画效果

    接下来,我们将深入探讨"animator属性动画效果"。 ### 1. 属性动画的基本概念 属性动画系统在Android 3.0(API级别11)引入,主要由三个核心组件构成:`ValueAnimator`、`ObjectAnimator`和`PropertyValuesHolder`...

    Fredo6 Animator v3.7a for SketchUp动画演示插件中文版

    SketchUp 草图大师动画演示插件中文版,可以做家具拼装动画演示

    Easy GIF Animator(动画制作软件)V6.2免激活版.rar

    15年新版本的Easy GIF Animator V6.2,一款易于使用且功能很强大的GIF动画制作工具,软件内建有简易使用向导,通过向导你可以创建新的动画或者动画横幅,创建动画效果的按钮。能够从现有的视频中创建动画,将视频...

    easy gif animator7.2.0.60(gif动画制作工具)更改GIF工具【汉化破解版】

    Easy GIF Animator是一款非常小巧、轻便、操作简单且功能非常强大的一款专业制作gif动画的软件。在制作gif动画的过程中,它可将动画转成灰阶、可设定动画回转数、可设定每个图片的透明色、可设定显示位置和影格持续...

    GIF转换ASCII动画-“ASCII ANIMATOR”

    GIF转换ASCII动画-“ASCII ANIMATOR”

    动画Animator.zip

    在本文中,我们将深入探讨如何在C#编程环境中利用Animator控件来实现动画效果。Animator.zip文件包含了一个方便易用的动画控件,它能够帮助开发者轻松地在应用程序中添加动态视觉元素,提升用户体验。 首先,C#是...

    Camera Path Animator v3.54 (unity 动画插件)

    Ease Curves :控制动画的速度,在特定的停止点的动画。 Events"将事件添加到其他对象的路径,或者可以调用其他对象,或广播事件; Orientations :通过路径控制摄像头的方向,只用于自定义动画模式。 Tilts:控制摄像机...

    unity角色动画之 animator controller

    在介绍Unity角色动画中Animator Controller的相关知识之前,我们首先要了解,随着游戏开发技术的发展,动画系统也在不断地升级改进。在Unity中,老版本的动画系统主要是通过Animation组件来控制动画的播放和混合,而...

    安卓之Animator讲解

    Animator 动画的实现机制说起来其实更加简单一点,因为他其实只是计算动画开启之后,结束之前,到某个时间点得时候,某个属性应该有的值,然后通过回调接口去设置具体值,其实 Animator 内部并没有针对某个 view 进行刷新,...

Global site tag (gtag.js) - Google Analytics