自定义View小圆点与ViewPage联动

//新定义一个Class,继承View

public class ViewClass extends View {

private Paint strokePaint;
private Paint fillPaint;
//总页面个数
int totolCount;
//当前第几个页面
int currentCount;
//半径
int mRadius = 30;
//间距
int mDistance = 20;

public ViewClass(Context context) {
    super(context);
}

public ViewClass(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    setMeasuredDimension(getFinalMeasuredWidth(widthMeasureSpec), getFinalMeasuredHeigh(heightMeasureSpec));
}

private int getFinalMeasuredHeigh(int heightMeasureSpec) {
    //模式和大小
    int mode = MeasureSpec.getMode(heightMeasureSpec);
    int size = MeasureSpec.getSize(heightMeasureSpec);
    int finlHeight = 0;
    switch (mode) {
        case MeasureSpec.EXACTLY:
            finlHeight = size;
            break;
        case MeasureSpec.AT_MOST:
            finlHeight = getPaddingTop() + getPaddingBottom() + 2 * mRadius;
            break;
    }
    return finlHeight;
}

private int getFinalMeasuredWidth(int widthMeasureSpec) {
    int mode = MeasureSpec.getMode(widthMeasureSpec);
    int size = MeasureSpec.getSize(widthMeasureSpec);
    int finlWidth = 0;
    switch (mode){
        case MeasureSpec.EXACTLY:
            finlWidth = size;
            break;
        case MeasureSpec.AT_MOST:
            finlWidth = getPaddingLeft()+mRadius+(totolCount-1)*(2*mRadius+mDistance)+getPaddingRight()+mRadius;
            break;
    }
    return finlWidth;
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //空心圆画笔
    strokePaint = new Paint();
    strokePaint.setStyle(Paint.Style.STROKE);
    strokePaint.setColor(Color.BLUE);
    //实心圆画笔
    fillPaint = new Paint();
    fillPaint.setStyle(Paint.Style.FILL);
    strokePaint.setColor(Color.RED);

    //画圆
    for (int i = 0; i <= totolCount; i++) {

        canvas.drawCircle(getPaddingLeft() + mRadius + (i - 1) * (2 * mRadius + mDistance),
                getPaddingTop() + mRadius,
                mRadius,
                strokePaint);

    }
    canvas.drawCircle(getPaddingLeft() + mRadius + (currentCount) * (2 * mRadius + mDistance),
            getPaddingTop() + mRadius,
            mRadius,
            fillPaint);
}

//获取总数
public void getCount(int totolCount) {

    this.totolCount = totolCount;

}

//获取当前到底是哪个被选中,获取页面下标
public void getCurrentCount(int currentCount) {
    this.currentCount = currentCount;
    invalidate();
}
}

2.Activity

public class MainActivity extends AppCompatActivity {

private ViewPager pag;
private ArrayList<Fragment> list;
private ViewClass indictor;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    pag = findViewById(R.id.page);
    indictor = findViewById(R.id.ci_indictor);

    list = new ArrayList<>();
    list.add(new FremOne());
    list.add(new FremTwo());
    list.add(new FremThree());

    GuideAdapter adapter=new GuideAdapter(getSupportFragmentManager(),list,MainActivity.this);
    pag.setAdapter(adapter);
    //这里有改动,需要将总数和当前下标得到
    int count = adapter.getCount();
    indictor.getCount(count);
    pag.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i1) {

        }

        @Override
        public void onPageSelected(int i) {
        //联动
            indictor.getCurrentCount(i);
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });
}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值