自定义圆形进度条
来源:互联网 发布:数控车床车圆弧编程 编辑:程序博客网 时间:2024/06/01 16:01
Paint paint;
int mcolor = Color.RED;
/**
* 圈的宽度
*/
private int mCircleWidth = 10;
float currentPoint;
private ValueAnimator anim;
public MyView(Context context) {
super(context);
init();
}
public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
paint = new Paint();
paint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setStyle(Paint.Style.STROKE);
int centre = getWidth() / 2; // 获取圆心的x坐标
int radius = centre - mCircleWidth / 2;// 半径
paint.setStrokeWidth(mCircleWidth); // 设置圆环的宽度
paint.setColor(Color.BLACK); // 设置圆环的颜色
RectF oval = new RectF(centre - radius, centre - radius, centre + radius, centre + radius); // 用于定义的圆弧的形状和大小的界限
canvas.drawCircle(centre, centre, radius, paint); // 画出圆环
paint.setColor(mcolor); // 设置圆环的颜色
canvas.drawArc(oval, -90, currentPoint, false, paint); // 根据进度画圆弧
paint.setStyle(Paint.Style.FILL);
paint.setTextSize(40);
float v = paint.measureText("78%");
canvas.drawText("78%",centre-v/2,centre+10,paint);
if (currentPoint == 0){
startAnimation();
}
}
private void startAnimation(){
anim = ValueAnimator.ofFloat(0,360);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
currentPoint = (float) valueAnimator.getAnimatedValue();
invalidate();
}
});
anim.setDuration(30000);
}
public void start(){
anim.start();
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public void resatrt(){
anim.resume();
anim.start();
}
public void set(int color){
mcolor = color;
}
public class MainActivity extends AppCompatActivity {
private MyView mv;
private List<Integer> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//开始
Button start = (Button) findViewById(R.id.start);
//重置
Button restart = (Button) findViewById(R.id.restart);
TextView tv = (TextView) findViewById(R.id.tv);
//自定义控件
mv = (MyView) findViewById(R.id.mv);
list = new ArrayList<>();
list.add(Color.BLUE);
list.add(Color.RED);
list.add(Color.GRAY);
list.add(Color.GREEN);
list.add(Color.WHITE);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int num = (int) (Math.random()*5);
System.out.println("==="+num);
mv.set(list.get(num));
}
});
//点击开始
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mv.start();
}
});
//点击重置
restart.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onClick(View view) {
mv.resatrt();
}
});
}
}
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="改变外层圆环颜色"
/>
<com.bwie.test.MyView
android:id="@+id/mv"
android:layout_margin="50dp"
android:layout_width="200dp"
android:layout_height="200dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始"/>
<Button
android:id="@+id/restart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重置"/>
</LinearLayout>
- 自定义圆形进度条,绘制进度条
- android 自定义圆形进度条
- 自定义的圆形进度条
- Android:自定义圆形进度条
- android自定义圆形进度条
- Android自定义圆形进度条
- Android自定义圆形进度条
- 自定义圆形进度条
- 自定义圆形进度条
- 自定义圆形进度条
- Android 自定义圆形进度条
- 自定义圆形进度条
- Android自定义圆形进度条
- Android自定义圆形进度条
- 自定义圆形进度条
- Android 自定义圆形进度条
- 自定义圆形进度条
- Android 自定义圆形进度条
- try...catch语句(matlab)
- STEP BY STEP
- 炸AEL.Mining.Services.Tie-Up.v1.5.4.14矿业软件
- mysql 数据库表的操作
- HDPCD-Java-复习笔记(1)
- 自定义圆形进度条
- SpringBoot 快速整合MyBatis
- 【机器学习实战】第14章 利用SVD简化数据
- ORA-01033:ORACLE initialization or shutdown in progress
- Maximum product of consecutive subsequence(最大连续子序列乘积)
- HashMap和Hashtable的区别
- spring管理事物
- java生成二维码
- Java NIO编写Socket服务器的一个例子