Android基础控件ProgressBar进度条的使用
生活随笔
收集整理的這篇文章主要介紹了
Android基础控件ProgressBar进度条的使用
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、簡(jiǎn)介
ProgressBar繼承與View類(lèi),直接子類(lèi)有AbsSeekBar和ContentLoadingProgressBar, 其中AbsSeekBar的子類(lèi)有SeekBar和RatingBar!
android:max:進(jìn)度條的最大值 android:progress:進(jìn)度條已完成進(jìn)度值 android:progressDrawable:設(shè)置軌道對(duì)應(yīng)的Drawable對(duì)象 android:indeterminate:如果設(shè)置成true,則進(jìn)度條不精確顯示進(jìn)度 android:indeterminateDrawable:設(shè)置不顯示進(jìn)度的進(jìn)度條的Drawable對(duì)象 android:indeterminateDuration:設(shè)置不精確顯示進(jìn)度的持續(xù)時(shí)間 android:secondaryProgress:二級(jí)進(jìn)度條?
2、簡(jiǎn)單使用
頭兩個(gè)是系統(tǒng)自帶,后面一個(gè)幀動(dòng)畫(huà)一個(gè)自定義View!
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:gravity="center"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".LoginActivity"><ProgressBarandroid:layout_width="wrap_content"android:layout_height="wrap_content"style="@android:style/Widget.ProgressBar.Large"/><ProgressBarandroid:layout_width="match_parent"android:layout_height="wrap_content"android:max="100"android:progress="10"android:secondaryProgress="20"style="@android:style/Widget.ProgressBar.Horizontal"/><ImageViewandroid:id="@+id/imageview11"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/amin_pgbar"/><com.example.xianfengzhang.myapplication.CustomView.CirclePgBarandroid:layout_width="wrap_content"android:layout_height="wrap_content" /> </LinearLayout>幀動(dòng)畫(huà)布局文件:
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false" ><itemandroid:drawable="@drawable/loading_01"android:duration="200"/><itemandroid:drawable="@drawable/loading_02"android:duration="200"/><itemandroid:drawable="@drawable/loading_03"android:duration="200"/><itemandroid:drawable="@drawable/loading_04"android:duration="200"/><itemandroid:drawable="@drawable/loading_05"android:duration="200"/><itemandroid:drawable="@drawable/loading_06"android:duration="200"/><itemandroid:drawable="@drawable/loading_07"android:duration="200"/><itemandroid:drawable="@drawable/loading_08"android:duration="200"/><itemandroid:drawable="@drawable/loading_09"android:duration="200"/><itemandroid:drawable="@drawable/loading_10"android:duration="200"/><itemandroid:drawable="@drawable/loading_11"android:duration="200"/><itemandroid:drawable="@drawable/loading_12"android:duration="200"/> </animation-list>幀動(dòng)畫(huà)Java文件:
public class LoginActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);// Set up the login form. ImageView imageView = (ImageView)findViewById(R.id.imageview11);final AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getDrawable();imageView.postDelayed(new Runnable() {@Overridepublic void run() {animationDrawable.start();}},100);} }自定義View:
package com.example.xianfengzhang.myapplication.CustomView;import android.annotation.SuppressLint; 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 xianfengzhang on 2017/12/22.*/@SuppressLint("ViewConstructor") 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;//目標(biāo)值,想改多少就改多少private int mTargetProgress = 90;private int mMax = 100;private int mWidth;private int mHeight;// 構(gòu)造方法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);//設(shè)置畫(huà)筆顏色mBackPaint.setAntiAlias(true);//設(shè)置畫(huà)筆鋸齒效果mBackPaint.setStyle(Paint.Style.STROKE);//設(shè)置畫(huà)筆風(fēng)格(空心|實(shí)心)mBackPaint.setStrokeWidth(mStrokeWidth);//設(shè)置空心邊框的寬度 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);//設(shè)置字體顏色mTextPaint.setAntiAlias(true);mTextPaint.setTextSize(80);//設(shè)置字體大小mTextPaint.setTextAlign(Paint.Align.CENTER);//設(shè)置字體對(duì)齊方式 }//onMeasure(測(cè)量控件大小的方法) 重寫(xiě)onMeasure方法 @Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){super.onMeasure(widthMeasureSpec, heightMeasureSpec);mWidth = getRealSize(widthMeasureSpec);mHeight = getRealSize(heightMeasureSpec);setMeasuredDimension(mWidth,mHeight);//保存測(cè)量的大小 } //onDraw繪制View自身的內(nèi)容 重寫(xiě)onDraw方法 @Overrideprotected 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);//從提供的測(cè)量規(guī)范中獲取模式int size = MeasureSpec.getSize(measureSpec);//從提供的測(cè)量規(guī)范中獲取尺寸 //MeasureSpec其實(shí)就是尺寸和模式通過(guò)各種位運(yùn)算計(jì)算出的一個(gè)整型值,它提供了三種模式,還有三個(gè)方法(合成約束、分離模式、分離尺寸) //UNSPECIFIED(未指定):父控件沒(méi)有對(duì)子控件施加任何約束,子控件可以得到任意想要的大小! //EXACTLY(完全):父控件給子控件決定了確切大小,子控件將被限定在給定的邊界里而忽略它本身大小。 //AT_MOST(至多):子控件至多達(dá)到指定大小的值。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);}} }?
轉(zhuǎn)載于:https://www.cnblogs.com/xianfeng-zhang/p/8085673.html
總結(jié)
以上是生活随笔為你收集整理的Android基础控件ProgressBar进度条的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 158.5. manifests
- 下一篇: 介绍几款开源好用的产品