android canvas使用line画半园

来源:互联网 发布:sql数值 编辑:程序博客网 时间:2024/06/07 22:22

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>
0 0
原创粉丝点击