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. 《Java就业培训教程》_张孝祥_书内源码_0
  2. 如何注册Delphi8?不要java版的!
  3. 研究生快毕业了。。学的是嵌入式,之后想走
  4. java经典基础题
  5. 接口之命令模式
  6. 如何在2D阵列中找到局部最小值?
  7. Java中累计时间的计算(以小时为最终结果)
  8. Java读取Unicode文件(UTF-8等)时碰到的BOM
  9. java类与对象,用程序解释
  10. idea配置完tomcat启动键为什么还是灰的