//新定义一个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) {
}
});
}
}