美文网首页
ProgressBar

ProgressBar

作者: 酥脆海苔饼干 | 来源:发表于2017-01-25 17:08 被阅读0次

    老掉牙的ProgressBar,我从未亲自动手实现过,今天大家都回家过年了,在公司闲来无事弄一弄。
    1.最为简单基础的进度条
    通过进程间的handler,message关系对progress进度项进行设置,代码如下:
    activity.xml布局:
    <pre>
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.progressbar.example.sm.progressbar.MainActivity">
    <ProgressBar
    style="?android:attr/progressBarStyleHorizontal"//通过该属性设置所显示出来的progressBar是进度条还是圆形
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:id="@+id/progressbar"/>
    <Button
    android:layout_marginTop="100dp"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:text="开始加载"
    android:id="@+id/button"/>
    </RelativeLayout>
    </pre>
    MainActivity.java:
    <pre>
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    ProgressBar progressBar;
    Button progress_button;
    Handler handle;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    progressBar=(ProgressBar)findViewById(R.id.progressbar);
    progress_button=(Button)findViewById(R.id.button);
    progress_button.setOnClickListener(this);
    handle=new Handler(){//在主线程中将所传递的message进行相应的处理
    @Override
    public void handleMessage(Message msg) {
    progressBar.setProgress(msg.arg1);//设置progressBar的进度
    super.handleMessage(msg);
    }
    };
    }
    @Override
    public void onClick(View v) {
    switch (v.getId()){
    case R.id.button:
    new Thread(new Runnable() {
    @Override
    public void run() {
    for(int i=0;i<100;i++)
    {
    Message msg = Message.obtain();
    msg.arg1=i;//利用message将进度量进行包装
    handle.sendMessage(msg);//利用handler将所包装的数据进行send
    }
    }
    }).start();
    }
    }
    }
    </pre>
    1.1若想要对进度条的默认颜色进行改变,以水平进度条的设置为例。
    根据源码可以看到ProgressBar所在的路径为framework/base/core/java/android/widget目录下(该目录下常存放常用的API),查看该目录下的PreogrssBar.java文件可以发现,默认的style为
    ?android:attr/progressBarStyleSmall,即显示小圆。不过此程序中我选用的为progressBarStyleHorizontal,那么查看framework/base/core/res/res目录下的style.xml文件,该布局下的android:name="widget.progressbar.horizontal"所设置的drawable为xml文件下的progress_horizontal。打开该属性文件,其起始标签为layer-list。具体如下所示:
    <pre>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
    <shape>
    <corners android:radius="5dip" />
    <gradient
    android:startColor="#ff9d9e9d"
    android:centerColor="#ff5a5d5a"
    android:centerY="0.75"
    android:endColor="#ff747674"
    android:angle="270"
    />
    </shape>
    </item>
    <item android:id="@android:id/secondaryProgress">//缓冲区的进度颜色
    <clip>
    <shape>
    <corners android:radius="5dip" />
    <gradient
    android:startColor="#80ffd300"
    android:centerColor="#80ffb600"
    android:centerY="0.75"
    android:endColor="#a0ffcb00"
    android:angle="270"
    />
    </shape>
    </clip>
    </item>
    <item android:id="@android:id/progress">//若想要改变进度条颜色,可以对此标签下的内容进行修改
    <clip>
    <shape>
    <corners android:radius="5dip" />
    <gradient
    android:startColor="#ffffd300"
    android:centerColor="#ffffb600"
    android:centerY="0.75"
    android:endColor="#ffffcb00"
    android:angle="270"
    />
    </shape>
    </clip>
    </item>
    </layer-list>
    </pre>
    因此,可以仿照源码下的style,在程序xml下新建style文件设计自己想要的进度条样式。
    1.2隐藏进度条
    调用Activity的setProgressBarVisibility(boolean)或则setProgressBarIndeterminateVisibility(boolean)就能实现控制进度条的显示和隐藏;
    即直接在Activity下:setProgressBarVisibility(false);
    setProgressBarIndeterminateVisibility(false);

    相关文章

      网友评论

          本文标题:ProgressBar

          本文链接:https://www.haomeiwen.com/subject/ghitittx.html