//布局文件<?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:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bw.u.day02dandianchukong.MainActivity"> <com.bw.u.day02dandianchukong.MyView android:id="@+id/cv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="start" android:text="點擊加載" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/button" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="startJia" android:text="點擊加載加速" android:layout_above="@+id/button" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/button2" /></RelativeLayout>//代碼部分package com.bw.u.day02dandianchukong;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;public class MainActivity extends AppCompatActivity { int max=360; int current=0; MyView cv; @Override PRotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cv = (MyView) findViewById(R.id.cv); } public void start(View view){ current=0; new Thread(new Runnable() { public void run() { while(current<=360){ current++; try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } cv.addrest(max,current); } } }){}.start(); } //點擊加速 public void startJia(View view){ current+=2; new Thread(new Runnable() { public void run() { while(current<=360){ current++; try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } cv.addrest(max,current); } } }){}.start(); } }//繼承viewpackage com.bw.u.day02dandianchukong;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.Toast;public class MyView extends View{ //聲明畫筆 Paint paint; //聲明第二個畫筆 Paint cpaint; //聲明進度畫筆 Paint jpaint; //最大值 int max = 360; //當前進度 int current; float textsize = 30; //創建方法發送線程 public void addrest(int max, int current) { this.max = max; this.current = current; postInvalidate(); } private float x=202; private float y=317; public MyView(Context context) { this(context,null); } public MyView(Context context, AttributeSet attrs) { this(context, attrs,R.style.APPTheme); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); circleview(canvas); } public void circleview(Canvas canvas){ //創建畫圓的畫筆 paint = new Paint(); cpaint = new Paint(); jpaint = new Paint(); int width = getWidth(); //圓的中心 // int center=width/2; //獲取圓的半徑 int radio = (width - 20) / 2; paint.setColor(Color.RED); paint.setStrokeWidth(5); paint.setStyle(Paint.Style.STROKE); paint.setAntiAlias(true); //設置進度條的顏色或者格式 cpaint.setColor(Color.BLUE); cpaint.setStrokeWidth(3); cpaint.setStyle(Paint.Style.STROKE); cpaint.setAntiAlias(true); //設置字體的顏色或格式 jpaint.setColor(Color.GREEN); jpaint.setStrokeWidth(2); jpaint.setTextSize(textsize); //用畫筆畫出一個圓 canvas.drawCircle(x, y, radio, paint); //設置進度條的方向或 RectF rectF = new RectF(x - radio, y - radio, x + radio, y + radio); canvas.drawArc(rectF, 0, 360*current/max, false, cpaint); //進度條百分比 int perent=(int) ((current*1.0/max*1.0)*100); float textWidth=paint.measureText(perent+"%"); canvas.drawText(perent+"%",x-textWidth/2,y+textWidth/2,jpaint); } public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: Toast.makeText(getContext(),"點擊圓內",Toast.LENGTH_SHORT).show(); break; case MotionEvent.ACTION_MOVE: this.x=event.getX(); this.y=event.getY(); this.invalidate(); break; } return true; }}
新聞熱點
疑難解答