android canvas使用line画半圆
时间:2022-07-27
本文章向大家介绍android canvas使用line画半圆,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例为大家分享了android canvas使用line画半圆具体代码,供大家参考,具体内容如下
LineView.java
public class LineView extends View {
private int progress = 0;
private int max = 100;
private int roundWidth = 50;
public LineView(Context context) {
super(context);
}
public LineView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public LineView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void setProgress(int progress) {
this.progress = progress;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStrokeWidth(roundWidth);
paint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, 200, paint);
paint.setStyle(Paint.Style.FILL);
paint.setStrokeWidth(10);
paint.setColor(Color.BLUE);
int startX = 0, startY = 0, stopX = 0, stopY = 0;
startX=0;
stopX=500;
for (int i = 0; i <= progress; i++) {
startY = stopY = getHeight()/2+200-roundWidth/2 - i*(400-roundWidth)/max;
double v = Math.pow((200 - roundWidth / 2), 2) - (Math.pow((startY-getHeight()/2), 2));
startX = (int)(getWidth()/2-Math.sqrt(v));
stopX = (int)(getWidth()/2+Math.sqrt(v));
canvas.drawLine(startX, startY, stopX, stopY, paint);
}
}
}
MainActivity.java
public class MainActivity extends Activity {
private LineView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (LineView)findViewById(R.id.lv);
lv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
lv.setEnabled(false);
new Thread() {
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
final int finalI = i;
runOnUiThread(new Runnable() {
@Override
public void run() {
lv.setProgress(finalI);
}
});
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
runOnUiThread(new Runnable() {
@Override
public void run() {
lv.setEnabled(true);
}
});
}
}.start();
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
<com.xhly.sdv.lineview.view.LineView
android:id="@+id/lv"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_centerInParent="true"
/
</RelativeLayout
以上就是本文的全部内容,希望对大家的学习有所帮助。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 【MySQL入门】之MySQL数据库的锁机制(二)
- 【MySQL】删库别着急跑路(一)--Xtrabackup的原理及使用
- 微服务[学成在线] day11:基于 ElasticSearch 构建搜索服务
- 【MySQL】删库别着急跑路(二)--mysqldump的使用
- 【MySQL】删库别着急跑路(三)--binlog2sql闪回工具的使用
- 微服务[学成在线] day10:课程发布、ElasticSearch
- MySql监控分析视图-sys schema
- 如何使用PyMysql操作MySQL数据库?
- 【redis】部署及参数详解(吐血整理,建议收藏)
- 【MySQL性能调优】-关于索引的那些事儿(一)
- 【索引潜规则】-覆盖索引、ICP、MRR详解
- 微服务[学成在线] day12:基于 Nuxt.js 构建搜索前端工程
- 别找了,你要的Redis命令都在这了
- 微服务[学成在线] day13:使用FFmpeg进行格式转换以及m3u8文件生成、文件分块上传接口实现
- GTID,你了解多少?