软件编程
位置:首页>> 软件编程>> Android编程>> android canvas使用line画半圆

android canvas使用line画半圆

作者:新火燎塬  发布时间:2022-01-05 17:58:57 

标签:android,canvas,半圆

本文实例为大家分享了android canvas使用line画半圆具体代码,供大家参考,具体内容如下

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>

来源:https://blog.csdn.net/qq_23077365/article/details/51763618

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com