您的位置:首页 > 移动开发 > Android开发

简单易懂Android之Animation(动画)及Activity动画跳转

2016-07-26 22:27 736 查看
动画的分类:

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方法实现返回跳转!

以上就是本人的理解,欢迎一起交流指教~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: