一、效果图
二、布局文件
activity_main.xml
<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.johnny.myprogress.MyProgress android:id="@+id/activity_person_info_fragment_common_progress" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:progress="80" android:progressDrawable="@drawable/progressbar_pd" /> </RelativeLayout>
progressbar_pd.xml
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 设置背景图 --> <item android:id="@android:id/background"> <nine-patch android:src="@drawable/progress_first_bg" /> </item> <!-- 设置一级图 --> <item android:id="@android:id/progress"> <clip> <nine-patch android:src="@drawable/progress_second_bg" /> </clip> </item> <!-- 设置二级图 --> <item android:id="@android:id/secondaryProgress"> <clip> <nine-patch android:src="@drawable/progress_first_bg" /> </clip> </item> </layer-list>
MyProgress.java
package com.johnny.myprogress; 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.widget.ProgressBar; public class MyProgress extends ProgressBar { String text; Paint mPaint; public MyProgress(Context context) { super(context); // TODO Auto-generated constructor stub System.out.println("1"); initText(); } public MyProgress(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub System.out.println("2"); initText(); } public MyProgress(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub System.out.println("3"); initText(); } @Override public synchronized void setProgress(int progress) { // TODO Auto-generated method stub setText(progress); super.setProgress(progress); } @Override protected synchronized void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); // this.setText(); Rect rect = new Rect(); this.mPaint.getTextBounds(this.text, 0, this.text.length(), rect); //int x = (getWidth() / 2) - rect.centerX(); int x = (getWidth() / 2) - rect.centerX(); int y = (getHeight()/2) - rect.centerY(); canvas.drawText(this.text, x, y, this.mPaint); } // 初始化,画笔 private void initText() { this.mPaint = new Paint(); this.mPaint.setColor(Color.WHITE); this.mPaint.setTextSize(18); // 去掉锯齿 this.mPaint.setFlags(Paint.ANTI_ALIAS_FLAG); } private void setText() { setText(this.getProgress()); } // 设置文字内容 private void setText(int progress) { int i = (progress * 100) / this.getMax(); this.text = String.valueOf(i) + "%"; } }
MainActivity.java
package com.johnny.myprogress; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }