美文网首页
属性动画设置轴点

属性动画设置轴点

作者: Drc15H | 来源:发表于2017-07-25 09:50 被阅读0次

    Android中动画可分为三种:View动画、帧动画和属性动画,其中View动画和属性动画通过对场景里的对象不断做图像变换(平移、缩放、旋转、透明度)从而产生动画效果,而缩放和旋转动画中有轴点的概念。默认情况下轴点是View的中心点,如缩放动画在水平方向上进行缩放的话会导致View向左右两个方向同时进行缩放,旋转动画会绕中心点进行旋转。那么这两种动画如何设置其轴点呢?

    对于View动画,其提供了相应的方法直接设置动画的轴点:

    //缩放动画
    ScaleAnimation scaleAnimation = new ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY);
    ScaleAnimation scaleAnimation = ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue);
    //旋转动画
    RotateAnimation rotateAnimation = new RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY);
    RotateAnimation rotateAnimation = new RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue);
    

    pivotX、pivotY,pivotXValue、pivotYValue表示轴点的坐标,表示轴点的坐标,pivotXType、pivotYType分别表示动画在X轴和Y轴相对于物件位置类型,共有三种类型:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENT,默认值为Animation.ABSOLUTE。

    对于属性动画,并没有直接提供设置轴点的动画,我们需要在执行某个View的属性动画前设置View的轴点。

    View.setPivotX(float pivotX);
    View.setPivotY(float pivotY);
    

    其中pivotX和pivotY是相对于该View左上角的坐标值而非相对于整个屏幕左上角的坐标值。如若需要让View绕着底部的中点进行旋转,可设置轴点为:

    View.setPivotX(View.getWidth() / 2);
    View.setPivotY(View..getHeight());
    

    这里需要注意的是,在onCreate、onStart、onResume中均无法正确得到某个View的宽/高信息,这是因为View的measure过程和Activity的生命周期方法不是同步执行的,因此无法保证Activity执行了onCreate、onStart、onResume时某个View已经测量完毕了,如果View还没有测量完毕,那么获得的宽/高就是0。

    可以通过View.post(runnable)方法获取View的宽高,通过post可以将一个runnable投递到消息队列的尾部,然后等待Looper调用此runnable的时候,View也已经初始化好了:

    view.post(new Runnable() {
                @Override
                public void run() {
                    View.setPivotX(View.getWidth() / 2);
                    View.setPivotY(View..getHeight());
                }
            });
    

    这样就把View的轴点设置为了View底部的中点了,然后再执行相应的属性动画即可。

    相关文章

      网友评论

          本文标题:属性动画设置轴点

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