Android开发之动画源码详细分析

Animation是一个用于View,Surfaces和其它对象实现动画效果的抽象类,其中常用的类是TranslateAnimation用于控制位置的改变

一下列出一些重要的属性和方法

Xml属性

android:duration:运行动画的时间

android:interpolator定义用于平滑动画运动的时间内插

android:repeatCount:定义动画重复的时间

方法:

set:RepeatCount(int):定义动画重复的时间

setRepeatMode(int):通过设置重复时间定义动画的行为

setStartOffsetlong):以毫秒为单位的动画运行前的延迟,一旦开始时间就达到了

Cancel():取消动画

hasStarted():判断动画是否已在运行

initialize(intwidth,intheight,intparentWidth,intparentHeight):初始化动画

reset():重置动画

Start()启动动画

其中还有一些常量

RESTART:重新运行

INFINITE:永无终止地运行

将动画用于指定的控件,所有继承自View的控件都有startAnimation(Animation)方法,通过调用此方法来应用动画于控件

AnimationUtils类介绍

为应用动画提供了通用的的方法,它有一个很重要的方法loadAnimation(Context,Animation)用于加载Animation的实例。

下面是一个实例源码下载

Android开发之动画源码Animation详细分析_第1张图片

Animationpage.xml是布局文件

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:padding="10dip"

android:layout_width="match_parent"

android:layout_height="wrap_content">

<ImageViewandroid:id="@+id/pw"

android:background="@drawable/a"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginBottom="10dip"

/>

<Buttonandroid:id="@+id/login"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="26sp"

android:text="震荡"

/>

<ViewFlipperandroid:id="@+id/flipper"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:flipInterval="2000"

>

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:textSize="26sp"

android:text="吴建强"/>

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:textSize="26sp"

android:text="李秀婷"/>

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:textSize="26sp"

android:text="张美静"/>

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:textSize="26sp"

android:text="吴美音"/>

</ViewFlipper>

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginBottom="5dip"

android:text="请选择你喜欢的人"

/>

<Spinnerandroid:id="@+id/spinner"

android:layout_width="match_parent"

android:layout_height="wrap_content"

/>

<TextView

android:id="@+id/target"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="26sp"

android:text="java语言"/>

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="20dip"

android:layout_marginBottom="5dip"

android:text="C#语言"/>

<Spinner

android:id="@+id/spinner1"

android:layout_width="match_parent"

android:layout_height="wrap_content"/>

</LinearLayout>

Animlayout.xml是动画文件

<?xmlversion="1.0"encoding="utf-8"?>

<translatexmlns:android="http://schemas.android.com/apk/res/android"

android:fromXDelta="0"

android:toXDelta="10"

android:duration="1000"

android:interpolator="@anim/cycle_7"/>

。。。

主程序

packagewjq.WidgetDemo;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.view.animation.Animation;

importandroid.view.animation.AnimationUtils;

importandroid.view.animation.Transformation;

importandroid.view.animation.TranslateAnimation;

importandroid.widget.AdapterView;

importandroid.widget.ArrayAdapter;

importandroid.widget.Spinner;

importandroid.widget.ViewFlipper;

importandroid.widget.AdapterView.OnItemSelectedListener;

/**

*动画Animation示例

*@author记忆的永恒

*

*/

publicclassAnimationDemoextendsActivityimplementsOnClickListener,

OnItemSelectedListener{

privateViewv;

privateString[]mStrings={"向上","向右","穿越",

"旋转"};

privatestaticfinalString[]INTERPOLATORS={"加速","Decelerate",

"减速","左右","Overshoot",

"Anticipate/Overshoot","弹回"};

privateViewFlippermFlipper;

privateSpinnerspinner;

privateSpinnerspinner1;

privateArrayAdapter<String>aa;

privateArrayAdapter<String>aa1;

/*

*(non-Javadoc)

*

*@seeandroid.app.Activity#onCreate(android.os.Bundle)

*/

@Override

protectedvoidonCreate(BundlesavedInstanceState){

//TODOAuto-generatedmethodstub

super.onCreate(savedInstanceState);

setContentView(R.layout.animationpage);

v=findViewById(R.id.login);

v.setOnClickListener(this);

mFlipper=(ViewFlipper)findViewById(R.id.flipper);

//反转

mFlipper.startFlipping();

spinner=(Spinner)findViewById(R.id.spinner);

aa=newArrayAdapter<String>(this,

android.R.layout.simple_spinner_item,mStrings);

aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(aa);

spinner.setOnItemSelectedListener(this);

spinner1=(Spinner)findViewById(R.id.spinner1);

aa1=newArrayAdapter<String>(this,

android.R.layout.simple_spinner_item,INTERPOLATORS);

aa1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner1.setAdapter(aa1);

spinner1.setOnItemSelectedListener(this);

}

@Override

publicvoidonClick(Viewv){

Animationshake=AnimationUtils.loadAnimation(this,R.anim.animlayout);

findViewById(R.id.pw).startAnimation(shake);

}

@Override

publicvoidonItemSelected(AdapterView<?>parent,Viewview,intposition,

longid){

if(parent.getAdapter()==aa){

switch(position){

case0:

mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,

R.anim.push_up_in));

mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,

R.anim.push_up_out));

break;

case1:

mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,

R.anim.push_left_in));

mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,

R.anim.push_left_out));

break;

case2:

mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,

android.R.anim.fade_in));

mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,

android.R.anim.fade_out));

break;

default:

mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,

R.anim.hyperspace_in));

mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,

R.anim.hyperspace_out));

break;

}

}

else{

finalViewtarget=findViewById(R.id.target);

finalViewtargetParent=(View)target.getParent();

Animationanm=newTranslateAnimation(0.0f,targetParent

.getWidth()

-target.getWidth()

-targetParent.getPaddingLeft()

-targetParent.getPaddingRight(),0.0f,0.0f);

anm.setDuration(1000);

anm.setStartOffset(300);

anm.setRepeatMode(Animation.RESTART);

anm.setRepeatCount(Animation.INFINITE);

switch(position){

case0:

anm.setInterpolator(AnimationUtils.loadInterpolator(this,

android.R.anim.accelerate_interpolator));

break;

case1:

anm.setInterpolator(AnimationUtils.loadInterpolator(this,

android.R.anim.decelerate_interpolator));

break;

case2:

anm.setInterpolator(AnimationUtils.loadInterpolator(this,

android.R.anim.accelerate_decelerate_interpolator));

break;

case3:

anm.setInterpolator(AnimationUtils.loadInterpolator(this,

android.R.anim.anticipate_interpolator));

break;

case4:

anm.setInterpolator(AnimationUtils.loadInterpolator(this,

android.R.anim.overshoot_interpolator));

break;

case5:

anm.setInterpolator(AnimationUtils.loadInterpolator(this,

android.R.anim.anticipate_overshoot_interpolator));

break;

case6:

anm.setInterpolator(AnimationUtils.loadInterpolator(this,

android.R.anim.bounce_interpolator));

break;

}

target.startAnimation(anm);

}

}

@Override

publicvoidonNothingSelected(AdapterViewparent){

//TODOAuto-generatedmethodstub

}

}


====================================================================================

谈谈程序员发展的5个出路 程序员接私活的几个注意事项

从IT菜鸟变“骨干”的10个建议 就业市场最急需的10大类IT人才

如何成为软件设计师混合型人才应届生就业,“IT行业”平均收入最高

找程序员做老公的10个好处 学Android软件开发的就业钱景分析

给IT新兵职业发展的15个建议 程序员成美2014收入最高职业

====================================================================================


更多相关文章

  1. android 动画入门
  2. Android动画效果translate、scale、alpha、rotate说明
  3. Android样式基础--属性动画((Property Animation)篇
  4. Android常用动画总结
  5. android activity进入退出动画自定义
  6. android中的spannable的使用(TextView分段显示不同颜色,字体,时间 )
  7. android 动画使用方式
  8. Android动画效果translate、scale、alpha、rotate详解

随机推荐

  1. Android亮灭屏功能实现
  2. GitHub上受欢迎的Android(安卓)UI Librar
  3. android对象池之Message
  4. Android第五个功能:文件存储到SDCard上面
  5. 【Android笔记】探究活动②使用Intent在
  6. Android(安卓)Service 服务(一)—— Servic
  7. Android实现网络图片查看器和网页源码查
  8. [置顶] [Android基础]Android中Handler的用
  9. Android的绘制文本对象FontMetrics的介绍
  10. android 显示特殊符号