• 进度条、拖动条


    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;
        }
     
    }

    image

    拖动条(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:  }

           image

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

  • 相关阅读:
    圆珠笔芯为什么那么细
    2017第45周二
    浅谈XXE攻击
    谈谈ssrf
    htop简介
    关闭火狐定期向“http://detectportal.firefox.com/”发包
    linux登录用户(终端)间的通信
    linux下ftp、telnet的安装和使用
    深入解析hostname
    supervisor启动sqlmapapi失败 sqlmapapi: ERROR (file is not executable)
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/3598328.html
Copyright © 2020-2023  润新知