android canvas uses line to draw a semicircle
- 2021-11-24 02:44:56
- OfStack
In this paper, we share the specific code of android canvas using line to draw semicircles for your reference. The specific contents are as follows
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>