Android UI之属性动画基础

1. 旋转动画

    private void propertyRotation(View view){
        ObjectAnimator.ofFloat(mIv,View.ROTATION,0,180f).setDuration(2000).start(); //按钮1
        ObjectAnimator.ofFloat(mIv,View.ROTATION,180f,0).setDuration(2000).start(); //按钮2
        ObjectAnimator.ofFloat(mIv,View.ROTATION,-180f,0).setDuration(2000).start();//按钮3
    }

综述:

        1.可以使用View.ROTATION.getName()来获得旋转字符串值

         2. 0-180f  顺时针旋转  Android 坐标系与数学坐标系y轴相反

            180f-0f 逆时针旋转

            -180-0 顺时针旋转 

            对于Android坐标系而言,-180 和 180是同一坐标点

2. 使用动画自带的数值器,在自定义VIew中的使用

    如下为2个在日常开发中用到的动画插值,渐进的改变状态

        mValueAnimator = ValueAnimator.ofFloat(start, end);
        mValueAnimator.setDuration(animTime);
        mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                mPercent = (float) valueAnimator.getAnimatedValue();
                mValue = mPercent * mMaxValue;
                mCurrentValue = mValue;
                invalidate();
            }
        });

        mValueAnimator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                // 停止完了
                mIsStopingOn = false;
            }

            @Override
            public void onAnimationStart(Animator animation) {
                super.onAnimationStart(animation);
                // 正在停止
                mIsStopingOn = true;
            }
        });
        mValueAnimator.start();
    private ValueAnimator showCollapsedAnimation(final View mTargetView, final int mStartHeight, final int mEndHeight){

        ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                final int newHeight = (int)((mEndHeight - mStartHeight) * (float)valueAnimator.getAnimatedValue() + mStartHeight);
                mTv.setMaxHeight(newHeight - mMarginBetweenTxtAndBottom);
                if (Float.compare(mAnimAlphaStart, 1.0f) != 0) {
                    applyAlphaAnimation(mTv, mAnimAlphaStart + (float)valueAnimator.getAnimatedValue() * (1.0f - mAnimAlphaStart));
                }
                mTargetView.getLayoutParams().height = newHeight;
                // 这个很重要 和invidate一样的牛逼 一个是 measure layout 一个是 draw
                mTargetView.requestLayout();
            }
        });
        valueAnimator.setDuration(mAnimationDuration);
        return valueAnimator;
    }

猜你喜欢

转载自blog.csdn.net/crazyZhangxl/article/details/80877093