动画Animationandroid
有两种加载方式:ide
一:再res文件夹下的anim文件夹里面的xml文件中编写实现(帧动画得再drawable中写)布局
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
</alpha>
</set>
中间部分是相应的动画名称:动画
一共有alpha(透明度),rotate(旋转),scale(缩放),translate(平移)四种基本的动画this
二:经过再代码中用相应的类实现。spa
一样的相应类的名称AlphaAnmation, RotateAnmation, ScaleAnmation, TranslateAnmationcode
先给出再xml文件中怎么样写动画和怎样调用:xml
透明度动画:blog
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!--透明度动画 duration:动画时间 fromAlpha:开始的透明度 toAlpha:结束的透明度--> <alpha android:duration="1000" android:fromAlpha="0.1" android:toAlpha="1.0" > </alpha> </set>
旋转动画:three
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!--旋转动画 duration:动画时间 fromDegrees:开始的角度 toDegrees:结束的角度 pivotX:旋转中心X以图片的宽的百分比位置开始 pivotY:旋转中心Y以图片的高的百分比位置开始 interpolator:旋转动画的样式--> <rotate android:duration="1000" android:fromDegrees="0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toDegrees="+360" /> </set>
缩放动画:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!--缩放动画 duration:动画时间 fillAfter:动画结束后是否回复原样 fromXScale:开始时缩放宽的比例 fromYScale:开始时缩放高的比例 toXScale:结束时缩放宽的比例 toYScale:结束时缩放高的比例 pivotX:以图片的宽的百分比位置开始 pivotY:以图片的高的百分比位置开始 interpolator:缩放动画的样式,这里是匀加速--> <scale android:duration="2000" android:fillAfter="false" android:fromXScale="0.0" android:fromYScale="0.0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.0" android:toYScale="1.0" /> </set>
位移动画:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!--透明度动画 duration:动画时间 fromXDelta:开始时X位置 fromYDelta:开始时Y位置 toXDelta:结束时Y位置 toYDelta:结束时Y位置 位置都是相对与图片中心点的相对位置--> <translate android:duration="1000" android:fromXDelta="10" android:fromYDelta="10" android:toXDelta="100" android:toYDelta="100" /> </set>
实现方法:(这里用图片加载为例子)
loadAnimation = AnimationUtils.loadAnimation(this, R.anim.XXX);XXX是动画的xml文件明
image.startAnimation(loadAnimation);
动态加载也相似:(以透明度为例子)
AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);//构建透明度动画透明度0.1到1
alphaAnimation.setDuration(100);//动画时间
image.startAnimation(alphaAnimation);
接下来将一下组合动画:有两种组合动画的方式
第一种:直接再xml文件种这样写:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!--startOffset:延迟多少时间后执行--> <alpha android:duration="3000" android:fromAlpha="0.2" android:toAlpha="1.0" /> <alpha android:duration="3000" android:fromAlpha="1.0" android:startOffset="3000" android:toAlpha="0.2" /> </set>
而后加载这个动画文件便可
第二种:
//连续1(先位移再旋转) case R.id.continue_btn: { loadAnimation = AnimationUtils.loadAnimation(this, R.anim.translate); final Animation loadAnimation2 = AnimationUtils.loadAnimation(this, R.anim.rotate); image.startAnimation(loadAnimation); //设置动画监听器 loadAnimation.setAnimationListener(new AnimationListener() { @Override//动画开始时回调 public void onAnimationStart(Animation arg0) { // TODO Auto-generated method stub } @Override//动画进行时回调 public void onAnimationRepeat(Animation arg0) { // TODO Auto-generated method stub } @Override//动画结束时回调 public void onAnimationEnd(Animation arg0) { // TODO Auto-generated method stub image.startAnimation(loadAnimation2); } }); break; }
这种方法更灵活
哦队了除了这种以外,其实再建立动画类的时候能够这样实现重复动画:
TranslateAnimation translate = new TranslateAnimation(-50, 50, 0, 0); translate.setDuration(1000);//动画时间 translate.setRepeatCount(Animation.INFINITE);//无限重复 translate.setRepeatMode(Animation.REVERSE);//倒序重复REVERSE 正序重复RESTART image.startAnimation(translate);
咱们再Activity切换的时候也能够添加切换的动画效果哦!
咱们只须要用这个方法便可
//第二个Activity退出的动画,第一个Activity进入的动画
overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out);
布局加载子布局的时候也能够用到动画!(以ListView为例子)
public class ListActivity extends Activity{ private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.list_layout); listView=(ListView) findViewById(R.id.listView); List<String>list=new ArrayList<String>(); for(int i=0;i<20;i++) { list.add("LWJ"+i); } ArrayAdapter<String>adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); listView.setAdapter(adapter); /** * 布局动画控制器 * 生成一个动画控制器,里面的参数: * AnimationUtils.loadAnimation(this, R.anim.zoom_in)动画集合 * 给this当前布局加载 * R.anim.zoom_in: 动画 */ LayoutAnimationController lac=new LayoutAnimationController(AnimationUtils.loadAnimation(this, R.anim.zoom_in)); //子控件加载顺序,这里是顺序加载,ORDER_RANDOM随机加载 lac.setOrder(LayoutAnimationController.ORDER_NORMAL); listView.setLayoutAnimation(lac);//加载布局动画 listView.startLayoutAnimation();//开始动画 } }
最后讲一个开头就说了的帧动画,注意得再drawable种写xml文件
直接这样就能够调用这个动画了
image.setImageResource(R.drawable.anim_list);
里面的参数就是你写的xml内容以下:
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/one" android:duration="500"/> <item android:drawable="@drawable/two" android:duration="500"/> <item android:drawable="@drawable/three" android:duration="500"/> <item android:drawable="@drawable/four" android:duration="500"/> <item android:drawable="@drawable/five" android:duration="500"/> <item android:drawable="@drawable/six" android:duration="500"/> </animation-list>
你执行的时候就会按上面图片的顺序一直切换播放的了。
好告终束了
若是有什么错误,或者我理解错误或不当的,恳请你们纠正,谢谢!嘻嘻嘻~