android 自定义画圆形轮播图指示器
自定义代码画圆,
·
自定义代码画圆, 轮播图指示器。直接上代码
public class BannerDotView extends View {
private int mNormalRadius = dp2px(8);
private int mSelectedRadius = dp2px(8);
private int mNormalWidth = dp2px(8);
private int mNormalHeight = dp2px(8);
private int mSpace = dp2px(5);
private int maxRadius;
private int mCount = 4;
private int mCurrentPosition=0;
protected Paint mPaint = new Paint();
public BannerDotView(Context context) {
this(context, null);
}
public BannerDotView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public BannerDotView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int count = mCount;
if (count <= 1) {
return;
}
mNormalRadius = mNormalWidth / 2;
mSelectedRadius = mNormalHeight / 2;
//考虑当 选中和默认 的大小不一样的情况
maxRadius = Math.max(mSelectedRadius, mNormalRadius);
//间距*(总数-1)+选中宽度+默认宽度*(总数-1)
int width = (count - 1) * mSpace + mNormalWidth + mNormalWidth * (count - 1);
setMeasuredDimension(width, Math.max(mNormalWidth, mNormalWidth));
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int count = mCount;
if (count <= 1) {
return;
}
float left = 0;
for (int i = 0; i < count; i++) {
mPaint.setColor(mCurrentPosition == i ? Color.BLUE : Color.GRAY);
int indicatorWidth = mCurrentPosition == i ? mNormalWidth : mNormalWidth;
int radius = mCurrentPosition == i ? mSelectedRadius : mNormalRadius;
canvas.drawCircle(left + radius, maxRadius, radius, mPaint);
left += indicatorWidth + mSpace;
}
}
protected int dp2px(float dp) {
final float scale = getContext().getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
}
更多推荐
已为社区贡献6条内容
所有评论(0)