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>

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. android隐藏以及显示软键盘
  2. android个人错误,持续更新
  3. Android中LiveData+Room+Paging简单实现
  4. android 之 Attr的使用
  5. android圆形的ImageView
  6. android学习日记(Handler_1)
  7. Android:可移动悬浮框
  8. Android(安卓)监控应用删除,并提示处理
  9. Android实现Alphabet ListView
  10. Android(安卓)Studio 使用中 遇到的那些