Android最好看的圆形进度条ProgressBar

系统自带的比较老土

布局文件:activity_main.xml

<LinearLayout 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"    android:orientation="vertical"    tools:context=".MainActivity">        <ProgressBar        style="@android:style/Widget.ProgressBar.Small"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <ProgressBar        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <ProgressBar        style="@android:style/Widget.ProgressBar.Large"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />        <ProgressBar        style="@android:style/Widget.ProgressBar.Horizontal"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:max="100"        android:progress="18" />    <ProgressBar        style="@android:style/Widget.ProgressBar.Horizontal"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="10dp"        android:indeterminate="true" />LinearLayout>

展示视图控制文件:MainActivity

package com.example.lenovo.myapplication;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity{    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}

看看自己写的圆形好看进度条

布局文件:activity_main.xml

"http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context=".MainActivity">    <com.example.lenovo.myapplication.CirclePgBar        android:layout_width="wrap_content"        android:layout_height="wrap_content" />

自己编辑的进度条文件:CirclePgBar

package com.example.lenovo.myapplication;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.View;/** * Created by yang_zzheng on 2016/7/12 * yangzhizheng2012@163.com */public class CirclePgBar extends View {    private Paint mBackPaint;    private Paint mFrontPaint;    private Paint mTextPaint;    private float mStrokeWidth = 50;    private float mHalfStrokeWidth = mStrokeWidth / 2;    private float mRadius = 200;    private RectF mRect;    private int mProgress = 0;    //目标值,想改多少就改多少    private int mTargetProgress = 90;    private int mMax = 100;    private int mWidth;    private int mHeight;    public CirclePgBar(Context context) {        super(context);        init();    }    public CirclePgBar(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    public CirclePgBar(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init();    }    //完成相关参数初始化    private void init() {        mBackPaint = new Paint();        mBackPaint.setColor(Color.WHITE);        mBackPaint.setAntiAlias(true);        mBackPaint.setStyle(Paint.Style.STROKE);        mBackPaint.setStrokeWidth(mStrokeWidth);        mFrontPaint = new Paint();        mFrontPaint.setColor(Color.GREEN);        mFrontPaint.setAntiAlias(true);        mFrontPaint.setStyle(Paint.Style.STROKE);        mFrontPaint.setStrokeWidth(mStrokeWidth);        mTextPaint = new Paint();        mTextPaint.setColor(Color.GREEN);        mTextPaint.setAntiAlias(true);        mTextPaint.setTextSize(80);        mTextPaint.setTextAlign(Paint.Align.CENTER);    }    //重写测量大小的onMeasure方法和绘制View的核心方法onDraw()    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        mWidth = getRealSize(widthMeasureSpec);        mHeight = getRealSize(heightMeasureSpec);        setMeasuredDimension(mWidth, mHeight);    }    @Override    protected void onDraw(Canvas canvas) {        initRect();        float angle = mProgress / (float) mMax * 360;        canvas.drawCircle(mWidth / 2, mHeight / 2, mRadius, mBackPaint);        canvas.drawArc(mRect, -90, angle, false, mFrontPaint);        canvas.drawText(mProgress + "%", mWidth / 2 + mHalfStrokeWidth, mHeight / 2 + mHalfStrokeWidth, mTextPaint);        if (mProgress < mTargetProgress) {            mProgress += 1;            invalidate();        }    }    public int getRealSize(int measureSpec) {        int result = 1;        int mode = MeasureSpec.getMode(measureSpec);        int size = MeasureSpec.getSize(measureSpec);        if (mode == MeasureSpec.AT_MOST || mode == MeasureSpec.UNSPECIFIED) {            //自己计算            result = (int) (mRadius * 2 + mStrokeWidth);        } else {            result = size;        }        return result;    }    private void initRect() {        if (mRect == null) {            mRect = new RectF();            int viewSize = (int) (mRadius * 2);            int left = (mWidth - viewSize) / 2;            int top = (mHeight - viewSize) / 2;            int right = left + viewSize;            int bottom = top + viewSize;            mRect.set(left, top, right, bottom);        }    }}

展示视图控制文件:MainActivity

package com.example.lenovo.myapplication;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity{    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}

本文参考学习:http://blog.csdn.net/coder_pig/article/details/47304109

更多相关文章

  1. Android(安卓)M PackageManagerService解析
  2. Android设备重启(reboot)---Android(安卓)studio
  3. Android(安卓)获取本地音乐文件
  4. Android(安卓)Gradle版本问题
  5. Android播放在线音乐文件
  6. Android读取Txt文件
  7. Android(安卓)之 AlertDialog 用户登录
  8. Android获取打开各种文件Intent汇总
  9. 文件读写

随机推荐

  1. Android(安卓)Testing Fundamentals 1, u
  2. Android(安卓)UI系列:关于按钮点击事件
  3. Android(安卓)SharedPreferences解析
  4. Android常用Manager
  5. Android(安卓)游戏与应用开发最佳学习路
  6. android 使用gdb调试的方式
  7. Android(安卓)软键盘问题总结
  8. Android(安卓)获取网络时间
  9. [置顶] Android4.2.2自增物理按键(framewo
  10. 关于cocos2dx的eclipse的"serializing cd