动画的分类:
1、帧动画(Frame)
类似电影胶片,由很多帧图片,通过不间断的改变,来产生动画效果。
2、补间动画(Tween)
对View控件进行变换(平移,缩放,旋转,透明度)来产生动画效果。
动画的分类:
常用的属性如下:
帧动画:
public class FrameAnimActivity extends AppCompatActivity { ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_frame_anim); iv = (ImageView) findViewById(R.id.frame_iv); // startFramAnim(); startFramAnim1(); } 静态帧动画如下: private void startFramAnim(){ AnimationDrawable drawable= (AnimationDrawable) iv.getBackground(); drawable.start(); } 调用动态帧动画如下: private void startFramAnim1(){ AnimationDrawable drawable=new AnimationDrawable(); for (int i=1;i<10;i++){ int id=getResources().getIdentifier("e"+i,"mipmap",getPackageName()); Drawable frame=getResources().getDrawable(id); drawable.addFrame(frame,100); } drawable.setOneShot(false); iv.setBackgroundDrawable(drawable); drawable.start(); } }
补间动画:
public class TweenAnimActivity extends AppCompatActivity { ImageView iv1,iv2,iv3,iv4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tween_anim); iv1= (ImageView) findViewById(R.id.tween_iv1); iv2= (ImageView) findViewById(R.id.tween_iv2); iv3= (ImageView) findViewById(R.id.tween_iv3); iv4= (ImageView) findViewById(R.id.tween_iv4); // 让iv1执行平移动画 startTweenTran1(iv1); startTweenTran1(iv2); startRotateAnim(iv3); startAnim(iv4); } /** * 使用xml的方式 * 开始一个平移动画, * 和帧动画的区别:帧动画要先绑定控件,在start(),补间动画要先启动,再绑定 * **/ private void startTweenTran(ImageView iv ){ // 1、 通过引入xml文件的方式加载一个动画 TranslateAnimation animation= (TranslateAnimation) AnimationUtils.loadAnimation(this,R.anim.translate); // 让动画动起来 animation.start(); // 把平移动画和iv对象进行绑定 iv.setAnimation(animation); } /** * fromXType:x坐标起始位置的类型(1.相对自己 2、相对父布局,3、局对位置) * fromXValue:x坐标起始位置的值 * 以下同理 * **/ private void startTweenTran1(ImageView iv){ TranslateAnimation animation=new TranslateAnimation( Animation.RELATIVE_TO_SELF,0f, Animation.RELATIVE_TO_SELF,2f, Animation.RELATIVE_TO_SELF,5f, Animation.RELATIVE_TO_SELF,10f); // 设置动画重置的次数 animation.setRepeatCount(10); // 设置动画 单次实行的时间 animation.setDuration(2000); // 设置动画 执行的模式(Animation.RESTART往返,Animation.RESTART重复) animation.setRepeatMode(Animation.RESTART); // 开始动画 animation.start(); // 让iv控件实现动画效果 iv.setAnimation(animation); } /** * 使用资源文件的方式,实现旋转动画,并启动 * **/ private void startRotateAnim(ImageView iv){ // 把旋转动画的资源文件,转换成旋转动画对象 RotateAnimation animation= (RotateAnimation) AnimationUtils.loadAnimation(this,R.anim.rotate); animation.start(); iv.setAnimation(animation); } /*** * * 使用资源文件实现,旋转和平移组合动画,并启动**/ private void startAnim(ImageView iv){ Animation animation=AnimationUtils.loadAnimation(this,R.anim.rotate_tanslate); animation.start(); iv.setAnimation(animation); } /** * * 响应手机上的按键按下时的方法 * **/ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // 1、判断到当前点击的按键为返回键 // 2、既然自己判断了返回键的监听事件,就要自己来实现返回的功能 if(keyCode==KeyEvent.KEYCODE_BACK){ finish(); overridePendingTransition(R.anim.tran_back_in,R.anim.tran_back_out); } return super.onKeyDown(keyCode, event); } }
上面图片是我写Demo里面建的类
activity跳转和返回 换一种动画效果如图:
建跳转tran_in.xml tran_out.xml写上要跳转的属性
然后
@Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,TweenAnimActivity.class); startActivity(intent); // 添加activity跳转时的动画效果 overridePendingTransition(R.anim.tran_in,R.anim.tran_out);实现跳转,返回动画效果如下图:
建返回tran_back_in.xml tran_back_out.xml写上要跳转的属性后
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // 1、判断到当前点击的按键为返回键 // 2、既然自己判断了返回键的监听事件,就要自己来实现返回的功能 if(keyCode==KeyEvent.KEYCODE_BACK){ finish(); overridePendingTransition(R.anim.tran_back_in,R.anim.tran_back_out); } return super.onKeyDown(keyCode, event); } }用onKeyDown方法实现返回跳转!
以上就是本人的理解,欢迎一起交流指教~