自定义带百分比进度条

一、效果图



 二、布局文件

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);
	}


}

 

猜你喜欢

转载自johnnycmj.iteye.com/blog/1968727
今日推荐