美文网首页
Android_属性动画

Android_属性动画

作者: 书虫大王X | 来源:发表于2019-10-30 17:32 被阅读0次

属性动画的优势:
相比于补间动画和帧动画,属性动画更加强大,而且解决了两种的一些缺陷,比如:补间动画只是改变了View的显示效果而已,而不会真正去改变View的属性,举个例子:
在屏幕的左上角添加一个按键,用补间动画将其移到右下角后,对按键进行点击,按键没有反应,但是对按键在左上角原来的位置点击,按键有反应。

1.ValueAnimator:

属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。ValueAnimator的作用是对值进行计算,所以调用ValueAnimator执行动画,我们只需要告诉它要操作的数据的起始值、结束值和值过度所需时间。除此之外,ValueAnimator还负责管理动画的播放次数、播放模式、以及对动画设置监听器等,例:

 public class wll extends View {

    /**
     * 实现的功能:饼状图
     */
    Path path;
    int angle = 5;

    public wll(Context context) {
        this(context,null);
    }

    public wll(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);


//        用属性动画实现该动画
//        设置动画的范围
        final ValueAnimator va = ValueAnimator.ofInt(0,360);
        va.setDuration(2000);
        va.setRepeatCount(ValueAnimator.INFINITE);
        va.setRepeatMode(ValueAnimator.REVERSE);
//        监听属性的值
        va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
//                获取动画执行过程中的属性值
                angle = (int)valueAnimator.getAnimatedValue();
                invalidate();
            }
        });
//        启动动画
        va.start();
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        drawPieChart(canvas,Color.BLACK,(float)(angle/360.0));
    }

    private void drawPieChart(Canvas canvas,int color,float rate){
        path = new Path();
        Paint paint = new Paint ();
        paint.setAntiAlias(true);//抗锯齿
        paint.setColor(color);
//        设置填充模式
        paint.setStyle(Paint.Style.FILL);
//        画圆
        canvas.drawArc(50,100,350,400,0,360*rate,true,paint);
    }
}
效果图
2.ObjectAnimator:

ValueAnimator是对一个数值进行过度的动画,但是ObjectAnimator就不同了,它可以直接对任意对象的任意属性进行动画操作。我们用的比较多的也是ObjectAnimator,但是ObjectAnimator还是继承于ValueAnimator的,关于
ObjectAnimator的用法,举个例子:

public class rotatePicture extends RelativeLayout {

    ImageView out;
    public rotatePicture(Context context) {
        this(context,null);
    }
    public rotatePicture(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    private void init() {
        ImageView liner = new ImageView(getContext());
        liner.setImageResource(R.drawable.a);
        addView(liner);

        out = new ImageView(getContext());
        out.setImageResource(R.drawable.b);
        addView(out);
    }
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
//       ObjectAnimator实现
        ObjectAnimator oa = ObjectAnimator.ofFloat(out,
                "rotation",0,360);
        oa.setDuration(1000);
        oa.setRepeatMode(ObjectAnimator.RESTART);
        oa.setRepeatCount(ObjectAnimator.INFINITE);
        oa.setInterpolator(new LinearInterpolator());
        oa.start();
        
    }
}

效果图
3.组合动画:

组合动画用到点的主要是AnimatorSet这个类,它为我们提供了一些方法:

  • play: 执行动画
  • after: 将现有动画插入到前一个动画之后执行
  • after: 现有动画延迟指定时间后执行
  • before:将现有动画插入到前一个动画之前执行
  • with: 现有动画和前一个动画同时执行
    例:

ObjectAnimator moveIn = ObjectAnimator.ofFloat(textview, "translationX", -500f, 0f);
ObjectAnimator rotate = ObjectAnimator.ofFloat(textview, "rotation", 0f, 360f);
ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);
AnimatorSet animSet = new AnimatorSet();
animSet.play(rotate).with(fadeInOut).after(moveIn);
animSet.setDuration(5000);
animSet.start();

相关文章

  • Android_属性动画

    属性动画的优势:相比于补间动画和帧动画,属性动画更加强大,而且解决了两种的一些缺陷,比如:补间动画只是改变了Vie...

  • Android_开发_Day26_android中的三种动画

    Android_开发_Day26_android中的三种动画 目的: 学会使用Android里面的动画来增加UI的...

  • Android_开发_Day1_体验_菜单动画

    Android_开发_Day1_体验_菜单动画 目的:开发工具的简单安装与实际体验 一、...

  • 属性动画学习使用总结

    Android 属性动画总结 属性动画的优点 属性动画的使用步骤 实例化属性动画对象 设置属性动画的时长 启动属性...

  • [Android动画]属性动画-小球下落动画实现

    属性动画 属性动画是通过直接改变View属性,实现的动画效果。与补间动画不同的是,属性动画是对象的属性的真实改变,...

  • Android动画-属性动画

    属性动画 所谓属性动画,就是改变对象Object的属性来实现动画过程。属性动画是对View的动画的扩展,通过它可以...

  • 动画之属性动画基础篇

    属性动画 属性动画,改变view或者object的属性实现动画,属性动画比补间动画更强大,不但可以实现旋转、平移等...

  • UI(四十八)属性动画

    属性动画->通过改变图层或者视图上面的属性值(支持动画的属性)产生的动画 属性动画的常用方法属性: 1、初始化 +...

  • iOS - 属性动画

    属性动画->通过改变图层或者视图上面的属性值(支持动画的属性)产生的动画 属性动画的常用方法属性: 1、初始化+(...

  • Android 动画

    动画类型 视图动画(补间动画、逐帧动画)属性动画 补间动画 逐帧动画 属性动画 对比 插值器:确定属性值从初始值过...

网友评论

      本文标题:Android_属性动画

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