美文网首页
Android-->模仿360底部导航按钮

Android-->模仿360底部导航按钮

作者: angcyo | 来源:发表于2017-04-27 08:45 被阅读25次

    效果图:


    这里写图片描述

    如果没有左右2个边界的判断, 其实还是很简单的.
    那就不断绘制drawCircle就可以了.

    难就难在左右边界这2个特殊的地方.
    我这里使用了drawArc的方法,完成左右2个特殊的地方.


    部分代码:

    //首先绘制 内圆. 也就是没有透明颜色的圆
    mPaint.setColor(mCircleColor);
    canvas.drawCircle(mCx, mCy, Math.min(curRadius, mCircleRadius), mPaint);
    
    //其次 绘制,带有透明颜色的圆
    mPaint.setColor(mCircleColorOut);
    canvas.drawCircle(mCx, mCy, Math.min(curRadius, mCircleRadiusOut), mPaint);
    
    //最后判断是否是左右特殊位置, 绘制arc
    if (drawLeft) {
      mPaint.setColor(mCircleColor);
      canvas.drawArc(getArcRecF(Math.min(curRadius, mCircleRadiusMax)), 90, 180, true, mPaint);
    } else if (drawRight) {
      mPaint.setColor(mCircleColor);
      canvas.drawArc(getArcRecF(Math.min(curRadius, mCircleRadiusMax)), -90, 180, true, mPaint);
    }
    
    //为了动画,需要一直改变绘制的半径
    if (curRadius < maxRadius) {
       curRadius += mRadiusDrawStep;
       invalidateSelf();
    }
    

    使用方法:

    //设置普通的背景
    button.setBackground(new CircleAnimDrawable().setPosition(CircleAnimDrawable.POS_LEFT));
    button.setBackground(new CircleAnimDrawable().setPosition(CircleAnimDrawable.POS_CENTER));
    button.setBackground(new CircleAnimDrawable().setPosition(CircleAnimDrawable.POS_RIGHT));
    
    //如果要在RadioButton里面使用,需要包一层Drawable
    private Drawable createRadioBackground(int position) {
      StateListDrawable listDrawable = new StateListDrawable();
      listDrawable.addState(new int[]{android.R.attr.state_checked}, new CircleAnimDrawable().setPosition(position));
      return listDrawable;
    }
    

    源码地址:
    https://github.com/angcyo/RJcenter/blob/master/rsen/src/main/java/com/rsen/drawable/CircleAnimDrawable.java

    至此: 文章就结束了,如有疑问: QQ群:274306954 欢迎您的加入.

    相关文章

      网友评论

          本文标题:Android-->模仿360底部导航按钮

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