日志

Android之ProgressBar

 来源    2016-12-12    0  

今天复习一下以前的知识,补充一下ProgressBar控件

  progressBar是进度条组件,通常用于用户展示某个耗时操作完成的进度,而不让用户感觉是程序失去了响应,从而更好地提升用户界面的友好性。

  1)制定ProgressBar显示风格

  2)ProgressBar的分类

  3)标题上ProgressBar的设置

  4)ProgressBar的关键属性

  5)ProgressBar的关键方法

  6)ProgressDialog的基础使用

  7)自定义ProgressBar样式

1)制定ProgressBar显示风格

  style = "?android:attr/progressBarStyleLarge"    大环形进度条

  style = "?android:attr/progressBarStyleSmall"   小环形进度条

  style = "?android:attr/progressBarStyleHorizontal"   水平进度条

  

  

2)ProgressBar的分类

  1.可以精确显示进度(可以显示刻度或者百分比)

  

  2.不可以精确显示精度(一直转啊转,类似于一个过场动画)

3)标题上ProgressBar的设置

  

  

 4)ProgressBar的关键属性

  android:max = "100" ——最大显示进度

  android:progress = "50" ——第一显示进度

  android:secondaryProgress = "80" ——第二显示进度

  android:indeterminate = "true" ——设置是否精确显示

    (true表示不精确显示进度,false表示精确显示进度)

5)ProgressBar的关键方法

  1)setProgress(int) 设置第一进度

  2)setSecondaryProgress(int) 设置第二进度

  3)getProgress() 获取第一进度

  4)getSecondaryProgress() 获取第二进度

  5)incrementProgressBy(int) 增加或减少第一进度

  6)incrementSecondaryProgressBy(int) 增加或减少第二进度

  7)getMax() 获取最大进度

  

案例:


<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="com.example.progressbar.MainActivity" >

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ProgressBar
        android:id="@+id/progressBar2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/><!-- 没有设置默认中环形进度条 -->

    <ProgressBar
        android:id="@+id/progressBar3"
        style = "?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    
    <ProgressBar
        android:secondaryProgress="80"
        android:progress="50"
        android:max="100"
        android:id="@+id/horiz"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="增加" />

    <Button
        android:id="@+id/reduce"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="减少" />

    <Button
        android:id="@+id/reset"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="重置" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

activity_main.xml


package com.example.progressbar;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;


public class MainActivity extends Activity implements OnClickListener {
    
    private ProgressBar progress ;
    private Button add;
    private Button reduce;
    private Button reset;
    private TextView text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //启用窗口特征,启用带进度和不带进度的进度条
        requestWindowFeature(Window.FEATURE_PROGRESS);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        setContentView(R.layout.activity_main);
        //显示两种进度条
        setProgressBarVisibility(true);//水平进度条
        setProgressBarIndeterminateVisibility(true);//环形进度条
        //Max = 10000
        setProgress(9999);
        init();
        
    }


    private void init() {
        progress = (ProgressBar) findViewById(R.id.horiz);
        add = (Button) findViewById(R.id.add);
        reduce = (Button) findViewById(R.id.reduce);
        reset = (Button) findViewById(R.id.reset);
        text = (TextView) findViewById(R.id.text);
        //getPeogress()获取第一进度
        int first = progress.getProgress();
        //获取第二进度
        int second = progress.getSecondaryProgress();
        //获取最大进度
        int max = progress.getMax();
        
        text.setText("第一进度百分比:"+(int)(first/(float)max*100)+"%,第一进度百分比:"+(int)(second/(float)max*100)+"%");
        add.setOnClickListener(this);
        reduce.setOnClickListener(this);
        reset.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.add :{
                //增加第一进度第二进度10个刻度
                progress.incrementProgressBy(10);
                progress.incrementSecondaryProgressBy(10);
                
                break ;
            }
            case R.id.reduce :{
                progress.incrementProgressBy(-10);
                progress.incrementSecondaryProgressBy(-10);
                
                break ;
            }
            case R.id.reset :{
                progress.setProgress(50);
                progress.setSecondaryProgress(80);
                
                break ;
            }
        }
        text.setText("第一进度百分比:"+(int)(progress.getProgress()/(float)progress.getMax()*100)+"%,第一进度百分比:"+(int)(progress.getSecondaryProgress()/(float)progress.getMax() * 100)+"%");
    }
}

MainActivity.java

6)ProgressDialog的基础使用


private ProgressDialog prodialog ;
private Button show;

show = (Button) findViewById(R.id.show);
show.setOnClickListener(this);


case R.id.show :{
/**
* 页面显示风格
*/
//新建ProgressDialog对象
prodialog = new ProgressDialog(MainActivity.this);
//设置显示风格
prodialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//设置标题
prodialog.setTitle("南方IT学院");
//设置对话框文字信息
prodialog.setMessage("欢迎大家");
//设置图标
prodialog.setIcon(R.drawable.ic_launcher);
/**
* 设置关于ProgressBar属性
*/
//设置最大进度
prodialog.setMax(100);
//设定初始化已经增长到的进度
prodialog.incrementProgressBy(50);
//进度条是明显显示进度的
prodialog.setIndeterminate(false);

/**
* 设定一个确定按钮
*/
prodialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "欢迎", Toast.LENGTH_LONG).show();
}
});
//是否可以通过返回按钮退出对话框
prodialog.setCancelable(true);

//显示ProgressDialog
prodialog.show();
break ;
}

MainActivity

7)自定义ProgressBar样式

style="@android:style/Widget.ProgressBar.Horizontal"
android:progressDrawable="@drawable/progress_bar"


<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />

        <solid android:color="#88000000"/>
        </shape>
    </item>
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />

                <gradient
                    android:angle="270"
                    android:centerColor="#C6B7FF"
                    android:centerY="0.75"
                    android:endColor="#C3B2FF"
                    android:startColor="#B9A4FF" />
            </shape>
        </clip>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />

            <gradient
                android:angle="270"
                android:centerColor="#74EBFF"
                android:centerY="0.75"
                android:endColor="#8EEFFF"
                android:startColor="#57E8FF" />
            </shape>
        </clip>
    </item>

</layer-list>

progress_bar.xmml
相关文章
android – Retrofit ProgressBar
问答我最近研究过Retrofit.我只是在我的项目中实施.我有近20个api.我已经宣布了所有的方法. public interface RF_Calls { @POST(AppConstants.API ...
android – 更改ProgressBar.Horizo​​ntal不确定行为
问答我尝试实现一个水平不确定的ProgressBar,它将在结束时反转其动画.为了澄清,我希望进度条从0到100动画,然后从100回到0. 这是a video of the standard animat ...
android – AppCompat ProgressBar高度
问答如何改变AppCompat ProgressBar的高度? 我尝试这个,但没有结果 <ProgressBar android:id="@+id/progressBar" st ...
1
android – 使用progressBar上传HttpUrlConnection多部分文件
问答我想通过HttpUrlConnection检查上传文件的进度.我怎么能这样做?我在OutputStream中写入数据时尝试计算字节数,但这是错误的,因为只有当我调用conn.getInputStrea ...
1
Android Indeterminate ProgressBar不会旋转
问答很抱歉,如果之前有人询问过,但我找不到答案(我搜索了!) 我试图按照google / android文档来显示一个不确定的进度条,并在我的应用程序完成一项冗长的任务时旋转. protected voi ...
android – 自定义ProgressBar成为温度计
问答如何自定义ProgressBar看起来像温度计?有可能改变颜色. 我的建议是将progressBar旋转90°变为垂直,然后覆盖一个空的温度计的图像,但这是一个糟糕而混乱的解决方案. 我认为最好是扩展 ...
1
android – 将一个ProgressBar添加到ListView / OnClick,称为一次
问答我们的想法是拥有一个项目列表,在单击项目后,ProgressBar将在任务完成时慢慢填充.例如,列出文件列表,每个文件都有一个"下载"按钮.单击下载按钮时,将在后台下载文件,并填写 ...
android – 自定义ProgressBar
问答我正在尝试创建一个如下所示的ProgresBar: 到目前为止,我已经创建了一个扩展ProgressBar的对象,现在我想弄清楚我的下一步是什么. 我知道我需要使用一些逻辑来覆盖onDraw(),这些 ...
1
Android – 将ProgressBar设置为垂直条而不是水平?
问答我正在尝试使用ProgressBar作为显示器的计量.我认为这将是一个容易的任务,并认为ProgressBar有一个属性是垂直的,但我没有看到任何东西. 此外,我希望能够在标杆旁边显示标尺,以便清楚地 ...
1
Android上ProgressBar上的背景动画图片?
问答当您需要更改ProgressBar的背景图像时,需要采取的适当措施是什么?我的意思是应该使用像.000这样的.gif图像,如果是这样,条形图的前景颜色会在处理过程中填充图像文件吗?有没有办法为酒吧的背 ...
1
android – 自定义ProgressBar与多颜色
问答我的应用程序要求是自定义进度条.自定义进度具有多色指示.例如进度小于30显示绿色.进度小于60和大于30显示黄色,最后进度从60到100显示为红色. 我想像这样进步吧 http://www.andro ...
1
Android自定义ProgressBar不旋转
问答我想更改ProgressBar的默认动画,所以我在主题中添加了自定义样式: styles.xml <style name="ProgressTheme" parent=&qu ...
android – 使用ProgressBar.setProgressDrawable的问题
问答对自定义颜色的ProgressBar使用setProgressDrawable对我们来说无法正常工作.我们在ListView的行中使用progressbars,但只有在列表中有多个元素时才会显示进度. ...
java – Android – Webview Progressbar
问答我在webview上面添加了进度条. 每当我点击链接时,我只是将进度条显示为可见. 我想在webview上有进度条覆盖,我想显示进度条的百分比.我知道css,但我不知道如何改变android中进度条的 ...
1
android.widget.ProgressBar无法强制转换为android.widget.LinearLayout
问答GIVEN <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns: ...
android – Widget.ProgressBar.Small和Widget.ProgressBar.Small.Inverse的区别
问答我为动作栏按钮尝试了两种不同的进度条样式 refreshMenuItem.setActionView(R.layout.actionbar_indeterminate_progress); actio ...
如何删除Android中progressBar中的文本?
问答我的应用程序中有一个进度条,但它显示一些文本默认我想要删除文本.请帮我如何删除文本. 这是我的代码片段: ProgressDialog progDialog = new ProgressDialog( ...
一起学Android之ProgressBar
日志本文简述在Android开发中进度条(ProgressBar)的常见应用,仅供学习分享使用. 概述 在Android开发中,进度条的使用场景有很多,如播放电影时可拖动的观看进度条,评分时使用的评分条, ...
Android开发--ProgressBar的应用
日志1.简介 Progress为加载进度的进度条. 2.构建 构建如图所示的界面,当按+键按钮时进度条增加:当按-键按钮时进度条减少.        xml: <RelativeLayout xml ...
[Android UI] ProgressBar自定义
日志转载自:http://gundumw100.iteye.com/blog/1289348 1: 在JAVA代码中 在java代码中 ProgressBar      继承自View, 在android ...