1. 程式人生 > >自定義view圓形進度條,矩形與二維碼

自定義view圓形進度條,矩形與二維碼

主介面佈局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" > <LinearLayout android:id="@+id/liner_title" android:layout_width="match_parent" android:layout_height="50dp" android:background="#D4DBED" android:orientation="horizontal"> <Button android:id="@+id/but01" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:text="《"/> <TextView android:gravity="center" android:id="@+id/text_view" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" android:text="那些花兒"/> <Button android:id="@+id/but002" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:text="進入"/> </LinearLayout> <Button android:id="@+id/but03" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="掃描二維碼" /> <shidongliang.bwei.com.zhoukaoonedemo.view.CustomProgess android:id="@+id/custom_path" android:layout_below="@+id/titleview_id" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 副介面佈局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/liner_title" android:layout_width="match_parent" android:layout_height="50dp" android:background="#D4DBED" android:orientation="horizontal"> <Button android:id="@+id/but01" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:text="《"/> <TextView android:gravity="center" android:id="@+id/text_view" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" android:text="那些花兒"/> <Button android:id="@+id/but02" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:text="進入"/> </LinearLayout> <shidongliang.bwei.com.zhoukaoonedemo.view.CustomViewGroup android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 主頁Main: package shidongliang.bwei.com.zhoukaoonedemo; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import shidongliang.bwei.com.zhoukaoonedemo.view.CustomProgess; public class MainActivity extends AppCompatActivity { private Button but01; private Button but002; private Button but03; private CustomProgess progres; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); but01 = (Button) findViewById(R.id.but01); but002 = (Button) findViewById(R.id.but002); but03 = (Button) findViewById(R.id.but03); progres = (CustomProgess) findViewById(R.id.custom_path); but002.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, OneActivity.class); startActivity(intent); } }); but03.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { progres.start(); } }); } } 副頁: package shidongliang.bwei.com.zhoukaoonedemo; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; /** * 此類的作用: * * @author: forever * @date: 2017/11/4 9:54 */ public class OneActivity extends AppCompatActivity { private Button but01; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.other_main); but01 = (Button) findViewById(R.id.but01); but01.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(OneActivity.this, MainActivity.class); startActivity(intent); } }); } } view: 圓形進度條: CustomProgress: package shidongliang.bwei.com.zhoukaoonedemo.view; import android.content.Context; import android.content.Intent; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; import com.xys.libzxing.zxing.activity.CaptureActivity; /** * Created by LYY on 2017/11/4. */ public class CustomProgess extends View { private boolean running = true; private Paint paint; private int progress = 0 ; Context context ; public CustomProgess(Context context) { super(context); } public CustomProgess(Context context, AttributeSet attrs) { this(context, attrs,0); } public CustomProgess(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; //建立一個畫筆 paint = new Paint(); // 抗鋸齒 paint.setAntiAlias(true); //設定畫筆的顏色 paint.setColor(Color.RED); //設定畫筆 填充是空心的 paint.setStyle(Paint.Style.STROKE); } public void start(){ new Thread(new Runnable() { @Override public void run() { while (running){ if (progress >= 360) { running = false; Intent intent = new Intent(context, CaptureActivity.class); context.startActivity(intent); return; } progress += 10 ; //子執行緒重新整理 系統呼叫onDraw() 方法 postInvalidate(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // getWidth() 獲取當前View 的寬度 int x = getWidth() / 2 ; int y = getHeight() / 2 ; int radius = 200 ; //設定畫筆的粗細 paint.setStrokeWidth(30); //定義一個區域 RectF rectF = new RectF(x-radius,y-radius,x+radius,y+radius); //畫弧 canvas.drawArc(rectF,-90,progress,false,paint); int text = (int) ((float)progress / 360 * 100 ); float textWidth = paint.measureText(text+"%"); Rect rextText = new Rect(); paint.getTextBounds(text+"%",0,(text+"%").length(),rextText); paint.setTextSize(30); paint.setStrokeWidth(1); //畫文字 canvas.drawText(text+"%",x-textWidth/2,y+rextText.height()/2,paint); } } CustomProgressView: package shidongliang.bwei.com.zhoukaoonedemo.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; /** * 此類的作用: * * @author: forever * @date: 2017/11/4 8:34 */ public class CustomProgrssView extends View { Paint paint ; public CustomProgrssView(Context context) { super(context); } int progress = 0 ; int max = 360; public CustomProgrssView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); paint = new Paint(); new Thread(new Runnable() { @Override public void run() { while (true){ if(progress > 360){ return; } postInvalidate(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } progress += 36 ; } } }).start(); } public CustomProgrssView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); paint.setColor(Color.BLACK); canvas.drawCircle(300,300,100,paint); RectF rectF = new RectF(200,200,400,400); paint.setColor(Color.RED); paint.setStrokeWidth(20); paint.setStyle(Paint.Style.STROKE); canvas.drawArc(rectF,-90,progress,false,paint); paint.setColor(Color.WHITE); paint.setStyle(Paint.Style.FILL); int percent = progress; //中間的進度百分比,先轉換成float在進行除法運算,不然都為0 float textWidth = paint.measureText(percent+" % "); paint.setTextSize(20); canvas.drawText((float)progress/(float) 360 * 100 +"%",300,300,paint); } } 矩形: package shidongliang.bwei.com.zhoukaoonedemo.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; /** * 此類的作用: * * @author: forever * @date: 2017/11/4 13:42 */ public class CustomViewGroup extends View { public CustomViewGroup(Context context) { super(context); } public CustomViewGroup(Context context, AttributeSet attrs) { super(context, attrs); } public CustomViewGroup(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setTextSize(10); paint.setColor(Color.BLACK); Rect rect = new Rect(0,0,150,80); canvas.drawRect(rect,paint); Paint pain = new Paint(); pain.setTextSize(10); pain.setColor(Color.RED); Rect rect1 = new Rect(150,150,300,150); canvas.drawRect(rect1,pain); Paint pain3 = new Paint(); pain3.setTextSize(10); pain3.setColor(Color.BLUE); Rect rect2 = new Rect(150,150,300,160); canvas.drawRect(rect2,pain3); canvas.drawRect(150,80,300,160,paint); canvas.drawRect(300,160,450,250,pain); canvas.drawRect(150,80,300,160,pain3); } }