Android图像与动画<3>

作者: 凉凉菇凉 | 来源:发表于2017-03-06 17:29 被阅读49次

    android项目中为了界面的展示和效果,不可避免的用到图片和动画,所以我会分三个模块来讲解自己所知道的图像处理和各种的动画视觉显示,学习中,虚心接受大神们的建议。

    坚持写完了Android图像与动画,可能刚开始使用简书,是不是写的内容有点乏味,通俗不易懂。这篇主要讲解最后最常用的属性动画,尽量简言通俗又易懂,生动有趣,符合大众的学习快速心理,看官们也可以多提建议,共同进步。哒哒~~

    ** 属性动画 **

    前面详细写了视图动画和属性动画,但是Android3.0之后,系统推出属性动画,让我们来塑造view对象的时候更广泛,不仅针对view对象,可以对它的属性设置,比如字体颜色,背景变化,padiing等等,但是如果使用视图动画更简单的完成你想要的效果,也没必要非的使用属性动画,嘿嘿,所以Android代码没有绝对好绝对不好,达到客户的需求是最重要的。

    属性动画有两个常用的类:ValueAnimator和ObjectAnimator

    ValueAnimator

    ValueAnimator用法相对挺简单的,我们只需要将初始值和结束值提供它,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。

      mImageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                  //0 表示开始的值   100表示结束的值
                    ValueAnimator valueAnimator=ValueAnimator.ofFloat(0,100);
                 //设置动画的时间
                    valueAnimator.setDuration(3000);
               // 添加一个监听器为了方面能看出运行的结果。
                    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener(){
                        @Override
                        public void onAnimationUpdate(ValueAnimator valueAnimator) {
                            Log.i("tag","当前的value值"+valueAnimator.getAnimatedValue());
                        }
                    });
                    valueAnimator.start();
    

    动画的过程中不断的调用onAnimationUpdate()方法,所以value值从0到100一直在变化。打印出来的效果图 如下:

    凉菇凉.png

    注意:ofFloat()方法可以传入任意多个参数。例如

    // 在3秒内从0过渡到5,再过渡到3,再过渡到10。
    ValueAnimator anim = ValueAnimator.ofFloat(0f, 5f, 3f, 10f);```
    
    **ObjectAnimator**
    
    ObjectAnimator的父类是ValueAnimator,所以继承了父亲的有点,在这基础上增加了对指定的属性动画的功能,例如 动画View的alpha属性的值。
    
    

    mImageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    // mImageView指定控件 alpha 指定控件的属性 后面的属性值表示从1f 到0f 再到 1f
    ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(mImageView,"alpha",1f,0f,1f);
    objectAnimator.setDuration(5000);
    objectAnimator.start();
    }
    });```

    第二个参数是控件的属性,除了alpha还可以是什么呢?可以是rotation、scaleY、translationX等等任意值。因为系统在执行动画时会通过反射机制调用对象的get和set方法。 比如,若我们给第二个参数传递abc,那么系统就是调用Button的setAbc和getAbc两个方法。只要在get和set方法中执行相应的操作即可。

    注意ObjectAnimator objectAnimator=ObjectAnimator.ofInt(mImageView,"paddingLeft",500);是没有任何效果的,因为必须有get和set两种方法才能够执行动画,现在只有get方法要封装一个setpaddingLeft的方法才能够显示效果。

     mImageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ObjectAnimator objectAnimator=ObjectAnimator.ofInt(new ViewWrapper(mImageView),"paddingLeft",500);
                    objectAnimator.setDuration(5000);
                    objectAnimator.start();
                }
            });```
    
    

    // 一个普通的包装类。
    public class ViewWrapper {
    private View mTarget;
    public ViewWrapper(View view) {
    this.mTarget = view;
    }
    public void setPaddingLeft(int paddingLeft) {
    mTarget.setPadding(paddingLeft, mTarget.getPaddingTop(),
    mTarget.getPaddingRight(), mTarget.getPaddingBottom());
    }
    }```

    为了在各种安卓版本上使用属性动画,你需要采用nineoldandroids,它是GitHub开源项目,jar包和源码都可以在网上下到 参考:https://cutler.github.io/android-D03/

    菇凉碎碎语:

    Android大图像处理和几种动画的使用简单的介绍完了,这都是最基本的一些知识,复杂的动画实现效果其实也都是简单的动画组合实现的,从初学者挺有帮助的。

    相关文章

      网友评论

        本文标题:Android图像与动画<3>

        本文链接:https://www.haomeiwen.com/subject/qghugttx.html