main.xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/progressbar1" />
    <ProgressBar 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressbar1"
        />
   <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/progressbar2" />
   <!-- 注:进度条默认为环形的, 假如要定义水平进度条时,需要加上属性  style="?android:attr/progressBarStyleHorizontal-->
    <ProgressBar 
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressbar2"
        />
</LinearLayout>

.java 程序

package com.example.progressbardemo;
    
import java.security.PublicKey;
    
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;
import android.widget.ProgressBar;
    
public class MainActivity extends Activity {
    
    
    private ProgressBar mProgressBar;
    private  int mProgressStatus = 0;
    
    //创建一个Handler对象
    
    private Handler mHandler = new Handler();
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mProgressBar = (ProgressBar) findViewById(R.id.progressbar2);
        //设定进度条的最大值,其将为该进度条显示的基数
        mProgressBar.setMax(1000);
        //新创建一个线程
        new Thread( new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                //循环1000次,不停更新mprogresstatus 的值
                while(mProgressStatus++<1000)
                {
                    //将一个runnable对象添加到消息队列中,并且当执行到该对象时执行run方法
                    mHandler.post(new Runnable() { //自定义
                        
                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            //重新设置进度条当前的值
                            mProgressBar.setProgress(mProgressStatus);
                        }
                    });
                }
            }
        }).start();    
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

拖动条(SeekBar)

seekbar 是 ProgressBar的一个子类

有几个方法:

SeekBar.getProgress() 获取拖动条当前值

setOnSeekBarChangeListener()方法,处理拖动条值变化事件,把SeekBar.OnSeekBarChangeListener实例作为参数传入

string.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    
    <string name="app_name">拖动条实例</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="speed">播放进度</string>
    
</resources>

main.xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/speed"
        android:id="@+id/speed"
         />
    <SeekBar 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/seek_bar"
        />
    
</LinearLayout>
activity.java中文件
   1:  package com.example.seekbardemo;
   2:  
   3:  import android.R.bool;
   4:  import android.os.Bundle;
   5:  import android.os.Handler;
   6:  import android.app.Activity;
   7:  import android.view.Menu;
   8:  import android.widget.SeekBar;
   9:  import android.widget.TextView;
  10:  
  11:  public class MainActivity extends Activity {
  12:      private SeekBar seekBar;
  13:      private TextView textView;
  14:      //标记是否需要更新
  15:      private boolean flag = true;
  16:      private Handler handler = new Handler();
  17:      
  18:      @Override
  19:      protected void onCreate(Bundle savedInstanceState) {
  20:          super.onCreate(savedInstanceState);
  21:          setContentView(R.layout.activity_main);
  22:          
  23:          seekBar = (SeekBar) findViewById(R.id.seek_bar);
  24:          textView = (TextView) findViewById(R.id.speed);
  25:  
  26:          //设定拖动条的最大值,其将为该拖动条显示的基数。
  27:          seekBar.setMax(100);
  28:          //该方法为 seekBar 注册一个监听, 当 SeekBar 发生改变时调用参数 l 中的对应方法。
  29:           seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
  30:              
  31:              @Override
  32:              public void onStopTrackingTouch(SeekBar seekBar) {
  33:                  // TODO Auto-generated method stub
  34:                  //设置标记需要刷新
  35:                  flag = true;
  36:                  refrech();
  37:                  
  38:              }
  39:              
  40:              @Override
  41:              public void onStartTrackingTouch(SeekBar seekBar) {
  42:                  // TODO Auto-generated method stub
  43:                  flag = false;
  44:              }
  45:              
  46:              @Override
  47:              public void onProgressChanged(SeekBar seekBar, int progress,
  48:                      boolean fromUser) {
  49:                  // TODO Auto-generated method stub
  50:                  //更改textView的内容
  51:                  textView.setText("进度为: " + progress + "%");
  52:              }
  53:          });
  54:          
  55:          
  56:      }
  57:  
  58:      protected void refrech() {
  59:          // TODO Auto-generated method stub
  60:          new  Thread(new Runnable() {
  61:              
  62:              @Override
  63:              public void run() {
  64:                  // TODO Auto-generated method stub
  65:                  while(flag && seekBar.getProgress()<100)
  66:                  {
  67:                      try{
  68:                          //暂停一秒
  69:                          Thread.sleep(1000);
  70:                      }
  71:                          catch (Exception e) 
  72:                          {
  73:                              // TODO: handle exception
  74:                              e.printStackTrace();
  75:                          }
  76:                      //将一个 Runnable 对象添加到消息队列当中,
  77:                      //并且当执行到该对象时执行 run()方法
  78:                      handler.post(new Runnable() {
  79:                      public void run() {
  80:                      //重新设置进度条当前的值,加 1
  81:                      seekBar.setProgress(seekBar.getProgress() + 1);
  82:                      }
  83:                      });
  84:                      
  85:                      }
  86:                  }
  87:          }).start();
  88:      }
  89:  
  90:      @Override
  91:      public boolean onCreateOptionsMenu(Menu menu) {
  92:          // Inflate the menu; this adds items to the action bar if it is present.
  93:          getMenuInflater().inflate(R.menu.main, menu);
  94:          return true;
  95:      }
  96:  
  97:  }

说明:
当 SeekBarActivity 创建时,为 seekBar 注册监听事件。 并且调用 refresh()方法,
自动刷新拖动条的进度值。当拖动条进度值改变时,修改 seekBar 上部 TextView 的内容。

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. 类和 Json对象
  3. Python list sort方法的具体使用
  4. python list.sort()根据多个关键字排序的方法实现
  5. android上一些方法的区别和用法的注意事项
  6. android实现字体闪烁动画的方法
  7. Android中dispatchDraw分析
  8. Android四大基本组件介绍与生命周期
  9. Android(安卓)MediaPlayer 常用方法介绍

随机推荐

  1. 2021年软件测试的六大趋势,必看!
  2. 课程表与表单的制作
  3. Flink State 最佳实践
  4. Flink 消息聚合处理方案
  5. 自学第七十天
  6. 快来,看看spring有多烂-来自jfinaL的嘲笑
  7. Linux上,最常用的一批命令解析(10年精选)
  8. 百度大佬10分钟教会你是前端bug还是后端b
  9. 没有预热,不叫高并发,叫并发高
  10. Linux生产环境上,最常用的一套“AWK“技巧