Android动画详细探究
Animation是一个用于View,Surfaces和其它对象实现动画效果的抽象类,其中常用的类是TranslateAnimation用于控制位置的改变
一下列出一些重要的属性和方法
Xml属性
android:duration:运行动画的时间
android:interpolator:定义用于平滑动画运动的时间内插
android:repeatCount:定义动画重复的时间
方法:
set:RepeatCount(int):定义动画重复的时间
setRepeatMode(int):通过设置重复时间定义动画的行为
setStartOffset(long):以毫秒为单位的动画运行前的延迟,一旦开始时间就达到了
Cancel():取消动画
hasStarted():判断动画是否已在运行
initialize(intwidth,intheight,intparentWidth,intparentHeight):初始化动画
reset():重置动画
Start()启动动画
其中还有一些常量
RESTART:重新运行
INFINITE:永无终止地运行
将动画用于指定的控件,所有继承自View的控件都有startAnimation(Animation)方法,通过调用此方法来应用动画于控件
AnimationUtils类介绍
为应用动画提供了通用的的方法,它有一个很重要的方法loadAnimation(Context,Animation)用于加载Animation的实例。
下面是一个实例 源码下载
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
}
}
更多相关文章
- Android(安卓)动画系列一:Drawable Animation
- Android属性动画之XML定义方式
- Android启动画面
- RadioButton、CheckBox去除选中时的动画阴影效果
- 原创:android模仿iphone 腾讯爱看文章列表放大缩小 带动画
- [转载]Android知识体系总结(全方面覆盖Android知识结构,面试&进阶
- android studio 60音乐播放器 下载音乐
- Android(安卓)绘制波浪曲线1
- Android(安卓)闹钟以及通知