自定义view画带有进度条的圆
来源:互联网 发布:mac系统word画流程图 编辑:程序博客网 时间:2024/05/16 09:20
ShanXing 类public class ShanXing extends View {
private int progress = 0;
private ProgressUpdateListener listener;
interface ProgressUpdateListener {
void onProgressUpdated(int progress);
}
public void setListener(ProgressUpdateListener listener) {
this.listener = listener;
}
public ShanXing(Context context) {
super(context);
}
public ShanXing(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ShanXing(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public int getProgress() {
return progress;
}
public void setProgress(int progress) {
this.progress = progress;
postInvalidate();
if (listener != null) {
listener.onProgressUpdated(progress);
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = getWidth();
int height = getHeight();
// 绘图范围
int react = Math.min(width, height);
// 半径
int radius = react / 2;
// 绘制最外层的大圆
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(radius, radius, radius, paint);
paint.reset();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(20);
paint.setColor(Color.RED);
// 画扇形
canvas.drawArc(new RectF(10, 10, react-10, react-10), -90, progress*360/100, true, paint);
// 画内层的小圆
paint.reset();
paint.setColor(Color.WHITE);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawCircle(radius, radius, radius - 20, paint);
// 画进度文字
paint.reset();
paint.setColor(Color.BLUE);
paint.setTextSize(40);
Rect rect = new Rect();
paint.getTextBounds(progress + "", 0, String.valueOf(progress).length(), rect); int textWidth = rect.width();
int textHeight = rect.height();
canvas.drawText(progress + "", radius-textWidth/2, radius-textHeight/2, paint);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
}
主类
public class MainActivity extends AppCompatActivity { private ShanXing shanXing; private Button btn; private static final int FLAG = 0x123; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case FLAG: int progress = shanXing.getProgress(); progress += 10; if (progress > 100) { progress = 0; } shanXing.setProgress(progress); handler.sendEmptyMessageDelayed(FLAG, 1000); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn); shanXing = (ShanXing) findViewById(R.id.shan); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { handler.sendEmptyMessageDelayed(FLAG, 1000); } }); shanXing.setListener(new ShanXing.ProgressUpdateListener(){ @Override public void onProgressUpdated(int progress) { if (progress >= 100) {// handler.remove; //跳转 /*startActivity(new Intent(MainActivity.this, ScanActivity.class));*/ Toast.makeText(MainActivity.this,"完成",Toast.LENGTH_SHORT).show(); } } }); } @Override protected void onStop() { super.onStop(); handler.removeMessages(FLAG); }}主<test.bwie.com.shanxing.ShanXing android:id="@+id/shan" android:layout_width="match_parent" android:layout_height="80dp" /> <Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="30dp" />布局
阅读全文
1 0
- 自定义view画带有进度条的圆
- 自定义View模拟进度条,带有百分比数字
- 自定义带有渐变颜色的进度条
- 自定义View的圆圈进度条
- 自定义View画圆形进度条
- 自定义View---自定义进度条
- 自定义view画圆实现进度条的显示
- 自定义View——简单的圆点进度条
- android_studio的自定义View的圆形进度条
- 带有进度条的Button
- 带有进度条的WebView
- 带有数字的进度条
- 带有进度条的WebView
- 【Android自定义View】美观个性的进度条
- 自定义View实现带边框的进度条
- 自定义View之炫丽的进度条
- 自定义View(带进度的圆形进度条)
- 自定义View实现进度条
- iOS抽屉视图(RESideMenu第三方实现)
- WebService
- BottomTabBar+fragment+viewpager
- (安卓) 自定义ViewGroup (自定义ViewGroup的方式实现梯形布局)
- RxJava和Retrofit结合
- 自定义view画带有进度条的圆
- R语言实战(第2版)笔记-第1章 R语言介绍
- REPO镜像服务器的搭建
- MongoDB和Redis区别
- 难道做开发板的这的没有几家?
- 判断网络请求方式工具类
- Java设计模式--观察者模式
- docker使用——容器不能访问外网
- leetcode---longest-palindromic-substring---字符串