Android 动画Animation
动画Animation
有两种加载方式:
一:再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(平移)四种基本的动画
二:通过再代码中用相应的类实现。
同样的相应类的名称AlphaAnmation, RotateAnmation, ScaleAnmation, TranslateAnmation
先给出再xml文件中怎么样写动画和怎样调用:
透明度动画:
<?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>
旋转动画:
<?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>
你执行的时候就会按上面图片的顺序一直切换播放的了。
好了结束了
如果有什么错误,或者我理解错误或不当的,恳请大家纠正,谢谢!嘻嘻嘻~
浙公网安备 33010602011771号