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


动画的分类:

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

以上就是本人的理解,欢迎一起交流指教~



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值