Android自定义View--Flyme6的Viewpage

作者: 生椰拿铁锤 | 来源:发表于2017-09-16 16:59 被阅读105次

    最新更新的Flyme6整体效果不错,动画效果增加了很多了,看了看flyme6的Viewpager指示器,觉得有点意思,就模仿写了一下,整体效果如下:


    效果演示图

    github地址:https://github.com/Dawish/FlymeTabStrip

    Gradle

    滑动绘制原理示意图

    onDraw主要的绘制工作:

    @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            // 如果指示器个数为0,直接结束绘画
            if (tabCount == 0) {
                return;
            }
            // 获取onMeasure后的高
            final int height = getHeight();
            /*
             * 画指示器下方的线
             */
            // 设置颜色
            paint.setColor(indicatorColor);
            // 当前指示tab位置
            View currentTab = container.getChildAt(currentPosition);
            // 当前tab的左边相对父容器的左边距
            float leftPadding = currentTab.getLeft();
            // 当前tab的右边相对于父容器左边距
            float rightPadding = currentTab.getRight();
            float tempPadding = 20;
            // 如果出现位移
    
            float centerPosition = 0.0f;
    
            if (currentPositionOffset >= 0f && currentPosition < tabCount - 1) {
                View nextTab = container.getChildAt(currentPosition + 1);
                final float nextTabLeft = nextTab.getLeft();
                final float nextTabRight = nextTab.getRight();
                // 位置是在滑动过程中不断变化的
                leftPadding = (currentPositionOffset * nextTabLeft + (1f - currentPositionOffset) * leftPadding);
                rightPadding = (currentPositionOffset * nextTabRight + (1f - currentPositionOffset) * rightPadding);
            }
            centerPosition = (rightPadding - leftPadding)/2 + leftPadding;
            float left = centerPosition - tempPadding - formatPercent(currentPositionOffset)*tempPadding;
            float right = centerPosition + tempPadding + formatPercent(currentPositionOffset)*tempPadding;
    
            // 绘制
            canvas.drawRect(left, height - indicatorHeight, right, height, paint);
    
        }
    
    

    相关文章

      网友评论

        本文标题: Android自定义View--Flyme6的Viewpage

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