广告位

progress(progression)

本节简介: 本节为大家带来的是Android基本UI控件中的Progresar (Progresar)。进度条的应用场景有很多,比如用户登录的时候,后台在发出请求,等待服务器返回信息。这时候就会用到进度条;或者一些耗时的操作需要等待

本节简介:

本节为大家带来的是Android基本UI控件中的Progresar (Progresar)。进度条的应用场景有很多,比如用户登录的时候,后台在发出请求,等待服务器返回信息。这时候就会用到进度条;或者一些耗时的操作需要等待很长时间的时候,这个时候如果没有提示,用户可能会认为是程序Carsh或者手机死机,会大大降低用户体验。所以,在需要耗时操作的地方,添加进度条,让用户知道当前程序正在执行,直观的告诉用户当前任务的进度等等!使用进度条可以给我带来这样的便利!好了,开始讲解本节内容吧~对了,Progresar官方API文档:Progresar

1.常见属性和基本示例的说明

从官方文件中,我们看到这样一个类图:

Progresar继承自View类,其直接子类为AbsSeekBar和ContentLoadingProgresar,其中AbsSeekBar子类为SeekBar和RatingBar,说明这两个子类也是基于Progresar实现的。

常见属性的详细说明:

android:max:进度条的最大值android:progress:进度条已完成进度值android:progressDrawable:设置轨道对应的Drawable对象android:indeterminate:如果设置成true,则进度条不精确显示进度android:indeterminateDrawable:设置不显示进度的进度条的Drawable对象android:indeterminateDuration:设置不精确显示进度的持续时间android:secondaryProgress:二级进度条,类似于视频播放的一条是当前播放进度,一条是缓冲进度,前者通过progress属性进行设置!

对应Ja,我们可以调用以下方法:

getMax():返回这个进度条的范围的上限getProgress():返回进度getSecondaryProgress():返回次要进度incrementProgresy(int diff):指定增加的进度isIndeterminate():指示进度条是否在不确定模式下setIndeterminate(boolean indeterminate):设置不确定模式下

我们来看看系统提供的默认进度条的例子!

使用系统默认进度条的示例:

操作效果图:

实施布局代码:

& ltlinear layout 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 “

工具:上下文= “。MainActivity ” >

& lt!-系统提供的圆形进度条,依次是大、中、小->:

& lt进度条

style=”@android:style/Widget。小进度条”

Android:layout _ width = ” wrap _ content “

Android:layout _ height = ” wrap _ content “/& gt;

& lt进度条

Android:layout _ width = ” wrap _ content “

Android:layout _ height = ” wrap _ content “/& gt;

& lt进度条

style=”@android:style/Widget。进度条。大”

Android:layout _ width = ” wrap _ content “

Android:layout _ height = ” wrap _ content “/& gt;

& lt!-系统提供的水平进度条->:

& lt进度条

style=”@android:style/Widget。水平进度条”

Android:layout _ width = ” match _ parent “

Android:layout _ height = ” wrap _ content “

安卓:max=”100 “

Android:progress = ” 18 “/& gt;

& lt进度条

style=”@android:style/Widget。水平进度条”

Android:layout _ width = ” match _ parent “

Android:layout _ height = ” wrap _ content “

android:layout_marginTop=”10dp “

Android:indeterminate = ” true “/& gt;

& lt/linear layout & gt;

好吧,除了第二个,什么都别想了…系统提供的东西满足不了我们的需求!下面来解释一下我们在实际开发中是如何处理进度条的!

2.使用动画代替圆形进度条

第一种方案是用一组连续的图片组成一帧动画。需要进度图的时候可以让动画可见,不需要的时候可以让动画不可见!而且这个动画一般是用AnimationDrawable实现的!好,让我们定义一个AnimationDrawable文件:

PS:用过的图片素材:进度条图片素材包装. zip

操作效果图:

实现步骤:在res目录下新建一个:anim文件,然后创建amin_pgbar.xml的资源文件:

& lt?xml版本=”1.0 “编码=”utf-8 “?& gt

& ltanimation-list xmlns:Android = ” http://schemas . Android . com/apk/RES/Android “

Android:one shot = ” false ” & gt;

& lt项目

Android:drawable = ” @ drawable/loading _ 01 “

Android:duration = ” 200 “/& gt;

& lt项目

Android:draw able = ” @ draw able/loading _ 02 “

Android:duration = ” 200 “/& gt;

& lt项目

Android:drawable = ” @ drawable/loading _ 03 “

Android:duration = ” 200 “/& gt;

& lt项目

Android:draw able = ” @ draw able/loading _ 04 “

Android:duration = ” 200 “/& gt;

& lt项目

Android:drawable = ” @ drawable/loading _ 05 “

Android:duration = ” 200 “/& gt;

& lt项目

Android:draw able = ” @ draw able/loading _ 06 “

Android:duration = ” 200 “/& gt;

& lt项目

Android:draw able = ” @ draw able/loading _ 07 “

Android:duration = ” 200 “/& gt;

& lt项目

Android:draw able = ” @ draw able/loading _ 08 “

Android:duration = ” 200 “/& gt;

& lt项目

Android:draw able = ” @ draw able/loading _ 09 “

Android:duration = ” 200 “/& gt;

& lt项目

Android:draw able = ” @ draw able/loading _ 10 “

Android:duration = ” 200 “/& gt;

& lt项目

Android:drawable = ” @ drawable/loading _ 11 “

Android:duration = ” 200 “/& gt;

& lt项目

Android:draw able = ” @ draw able/loading _ 12 “

Android:duration = ” 200 “/& gt;

& lt/animation-list & gt;

然后写一个布局文件,里面只有一个ImageView,用来显示进度条。将src设置为上面的可提取资源!最后到MainActivity.ja。

公共类MainActivity扩展AppCompatActivity {

private ImageView img_pgbar;private ImageView img _ pgbar

私人动画可绘制广告;

@覆盖

受保护的void onCreate(Bundle sed instancestate){

super . oncreate(sedInstanceState);

setContentView(r . layout . activity _ main);

img_pgbar = (ImageView) findViewById(R.id.img_pgbar);img _ pg bar =(ImageView)findViewById(r . id . img _ pg bar);

ad = (AnimationDrawable) img_pgbar.getDrawable();ad =(animation drawable)img _ pg bar . get drawable();

img_pgbar.postDelayed(new Runnable() {img _ pg bar . post delayed(new Runnable(){

@覆盖

公共无效运行(){

ad . start();

}

}, 100);

}

}

下面只是如何启动动画,剩下的就看你自己了~需要显示进度条的时候,让ImageView可见;不需要的时候就让他躲起来!其实Progresar本身就有一个indeterminateDrawable,只需将这个参数设置为上面的动画资源即可,但是进度条的图案大小不能直接修改,需要在Ja代码中修改。如果你设置了宽度和高度,而这个宽度和高度太大,你会看到有多个进度条…自己掂量吧~

3.自定义圆形进度条

我相信你看完2场会吐槽,,弄个动画骗人。哈哈,实际发展中就是这样。当然,以上情况只适用于不需要显示进度的场合,想显示进度也没用。好吧,我们来看看网上一个简单的自定义圆形进度条!代码还是比较简单的,通俗易懂,有兴趣可以看看,或者做相关扩展~

操作效果图:

实施代码:

自定义视图类:

/**

*由Jay于2015/8/5 0005创作。

*/

公共类CirclePgBar扩展视图{

私漆mBackPaint

私人油漆制造商;

私漆mTextPaint

私有浮点mStrokeWidth = 50

私有float mHalfStrokeWidth = mStrokeWidth/2;

私有float mRadius = 200

私人直接投资;

private int mProgress = 0;

//目标值可以随意更改。

private int mTargetProgress = 90

private int mMax = 100

private int mWidth

private int mHeight

公共CirclePgBar(上下文context) {

超级(上下文);

init();

}

public CirclePgBar(上下文上下文,属性集属性){

super(context,attrs);

init();

}

public circle gbar(Context Context,AttributeSet attrs,int defStyleAttr) {

super(context,attrs,defStyleAttr);

init();

}

//完成相关参数的初始化

私有void init() {

mBackPaint = new Paint();

mBackPaint.setColor(Color。白色);

mbackpaint . setantialias(true);

mBackPaint.setStyle(Paint。Style .笔画);

mbackpaint . setstrokewidth(mStrokeWidth);

mFrontPaint = new Paint();

mFrontPaint.setColor(Color。绿色);

mfront paint . setantialias(true);

mFrontPaint.setStyle(Paint。Style .笔画);

mfront paint . setstrokewidth(mStrokeWidth);

mTextPaint = new Paint();

mTextPaint.setColor(Color。绿色);

mtextpaint . setantialias(true);

mtextpaint . settextsize(80);

mTextPaint.setTextAlign(Paint。居中对齐);

}

//重写用于测量大小的onMeasure方法和用于绘图视图的核心方法onDraw()

@覆盖

受保护的void on measure(int width measurespec,int heightMeasureSpec) {

super . on measure(widthMeasureSpec,heighteasurespec);

mWidth = getRealSize(widthMeasureSpec);

MH height = get realsize(heightmesspec);

setMeasuredDimension(mWidth,m height);

}

@覆盖

受保护的void onDraw(画布画布){

init rect();

浮动角度= mProgress/(float)mMax * 360;

canvas.drawCircle(mWidth / 2,mHeight / 2,mRadius,mBackPaint);

canvas.drawArc(mRect,-90,angle,false,mfront paint);

canvas.drawText(mProgress + “% “,mWidth / 2 + mHalfStrokeWidth,mHeight / 2 + mHalfStrokeWidth,mTextPaint);

if(mProgress & lt;mTargetProgress) {

mProgress+= 1;

invalidate();

}

}

public int get realsize(int measure spec){

int result = 1;

int mode = measure spec . get mode(measure spec);

int size = measure spec . getsize(measure spec);

if (mode == MeasureSpec。至多|| mode == MeasureSpec。未指定){

//自己算

result =(int)(mRadius * 2+mStrokeWidth);

}否则{

结果=大小;

}

返回结果;

}

私有void initRect() {

if (mRect == null) {

mRect = new RectF();

int viewSize =(int)(mRadius * 2);

int left =(m width-viewSize)/2;

int top =(mHeight-viewSize)/2;

int right = left+viewSize;

int bottom = top+viewSize;

mRect.set(左、上、右、下);

}

}

}

然后补充:

& ltcom . Jay . progress bardemo . circle pgbar

Android:layout _ width = ” match _ parent “

Android:layout _ height = ” match _ parent “/& gt;

就这么简单~

本节概述:

本节介绍Android中常用的控件:Progresar,说明其基本用法,以及进度条在实际开发中的两种实现方法。第二个自定义进度条可以自己完善,然后在实际开发中使用~!

本文来自网络,不代表本站立场。转载请注明出处: https://www.djladysyren.com/a-82263.html
1
上一篇中国研究生招生信息网(研招网)(心理学研究生报考条件)
下一篇 以色列(美国为什么怕以色列)

为您推荐

联系我们

联系我们

186 2726 9593

在线咨询: QQ交谈

邮箱: 120632399@qq.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部