您的位置:首页 > 移动开发 > Android开发

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

2016-07-29 17:51 513 查看
效果图:



如果没有左右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 欢迎您的加入.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息