本文实例为大家分享了android canvas使用line画半圆具体代码,供大家参考,具体内容如下
LineView.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<? 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 > |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_23077365/article/details/51763618