问答详情
源自:5-6 实现旋转动画

求解答鸿神的旋转中心是怎么定的

没看懂什么意思,为啥旋转中心在变化

提问者:cwscc 2019-11-27 16:55

个回答

  • 行者木
    2019-12-29 12:04:07

    public class RotateTransformer implements ViewPager.PageTransformer {
        //最大旋转角度
        public static final float MAX_ROTATE = 15;

       
    //page:左右两个图片
        //position<0时,page表示左页
        //position>0时,page表示右页
        //position:左右两页的滑动比例
        //1)左页滑出,右页滑入:
        //左页的position: ( 0 -> -1 )
        //右页的position:( 1 -> 0 )
        //2)右页滑出,左页滑入:
        //左页的position: ( -1 -> 0 )
        //右页的position:( 0 -> 1 )
        @Override
        public void transformPage(View page, float position) {

            //旋转中心点:当前页面的左上角顶点
            //旋转角度正值方向:顺时针
            //左页移出屏幕时
            if (position < -1) { // [-Infinity,-1)
                //左页逆时针旋转
                //旋转中心:左页的右下角顶点
                //旋转角度:逆时针旋转到最大值
                page.setRotation(-MAX_ROTATE);
               
    page.setPivotX(page.getWidth());
               
    page.setPivotY(page.getHeight());
           
    }
            //左右页面都在在屏幕内时
            else if (position <= 1) { // [-1,1]
                //左边页面逆时针旋转
                //旋转中心点:底边中心点->右下角顶点
                //旋转角度:逆时针旋转
                if(position<0){
                    //动态调整旋转中心点
                    float pivotX = 0.5f * page.getWidth() + 0.5f * page.getWidth() * Math.abs(position);
                   
    float pivotY = page.getHeight();
                   
    page.setPivotX(pivotX);
                   
    page.setPivotY(pivotY);
                   
    //动态调整旋转角度
                    float roateAngl = MAX_ROTATE * position;
                   
    page.setRotation(roateAngl);
               
    }
                //左边页面逆时针旋转
                //旋转中心点:底边中心点->左下角顶点
                //旋转角度:顺时针旋转
                else
                {
                    //动态调整旋转中心点
                    float pivotX = 0.5f * page.getWidth() * (1-Math.abs(position));
                   
    float pivotY = page.getHeight();
                   
    page.setPivotX(pivotX);
                   
    page.setPivotY(pivotY);
                   
    //动态调整旋转角度
                    float roateAngl = MAX_ROTATE * position;
                   
    page.setRotation(roateAngl);
               
    }
            }
            //右页移出屏幕时
            else { // (1,+Infinity]
                //右页顺时针旋转
                //旋转中心点:左下角顶点
                //旋转角度:顺时针旋转到最大值
                page.setRotation(MAX_ROTATE);
               
    page.setPivotX(0);
               
    page.setPivotY(page.getHeight());
           
    }

        }

    }