Android控件之ProgressBar(进度条),ToggleButton/SwitchBar(开关按钮),SeekBar(拖动条)/RatingBar(等级评分)

1.ProgerssBar(进度条)

     平时我们在下载东西的时候都会遇见进度条,进度条主要分为两种,一种是圆形的进度条还有一种是矩形的进度条。怎么去得到它们呢,在写控件的时候都是写ProgressBar,这时我们需要通过属性来得到不同的进度条:

矩形进度条:

<ProgressBar
    android:id="@+id/pb_main_progressBar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

圆形进度条:
<ProgressBar
    android:id="@+id/progressBar2"
    style="?android:attr/progressBarStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />

如何实现进度条的进程呐,那就需要在Java文件中获取进度条的id去设置进程了,这时我们需要用到线程,不过在创建线程的时候我们要设置主线程和子线程,因为主线程里面不能执行耗时的操作,一旦使用了耗时的操作就会报ANR(应用程序无响应)的错误,所以为了不让主线程报错我们需要写一个子线程来替主线程做事,这样来说应该可以了,但是其实它俩是没有任何关系的,所以我们需要找它们俩的中介来建立联系(Handler),代码如下:

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;

import java.util.Random;

/**
 * Created by Administrator on 2017/7/19.
 */

public class ProgressbarActivity extends AppCompatActivity {

    private TextView textview;
    private ProgressBar progressbar;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_progress);

        //获取id
        textview = (TextView) findViewById(R.id.tv_main_textview);
        progressbar = (ProgressBar) findViewById(R.id.pb_main_progressBar);

    }
    //ANR
    //application not responsing应用程序无响应
    //why:因为在主线程中执行了耗时操作
    //how:把耗时操作 写到子线程中

//主线程
    public void download(View view){
        new MyThread().start();
    }
//中介建立联系
   Handler handler=new Handler(){
     @Override
      public void handleMessage(Message msg) {
         super.handleMessage(msg);
         int i=msg.what;
 //要转为String类型
         textview.setText(i+"");
     }
 };


//子线程
    class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            for (int i = 0; i <=100 ; i++) {
                progressbar.setProgress(i);
                 handler.sendEmptyMessage(i);
                try {
                    //随机加载
                    Random ran=new Random();
                    int n=ran.nextInt(200);
                    Thread.sleep(n);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


2.ToggleButton(开关按钮)

   ToggleButton它是用来展示按钮是选中还是未选中的状态,它的默认值为关闭的

<ToggleButton
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:textSize="40sp"
    android:textOff="开"
    android:layout_marginTop="40dp"
    android:layout_gravity="center"
    android:textOn="关"
    android:id="@+id/tb_main_tbutton"
    android:onClick="toggle"
    />

public class MainActivity extends AppCompatActivity{

    private ImageView imageview;
    private ToggleButton togglebutton;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获取图片id
        imageview = (ImageView) findViewById(R.id.iv_main_imageview);
}

public void toggle(View view){
    boolean b=  ((ToggleButton)view).isChecked();
    if(b){
        imageview.setImageResource(R.drawable.center2);
    }else{
        imageview.setImageResource(R.drawable.center1);
    }
}

Android控件之ProgressBar(进度条),ToggleButton/SwitchBar(开关按钮),SeekBar(拖动条)/RatingBar(等级评分)




3.SwitchBar(滑动开关)

  SwitchBar控件就像我们平常在手机上看到的开关按钮一样,它与ToggleButton的区别在于SwitchButton它可以滑动,而ToggleButton不可以,只要你把这两个控件对比下就会知道了

<Switch
    android:id="@+id/switch1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
   android:layout_gravity="center"
    android:onClick="switchbt"
    android:layout_marginTop="20dp"

    />


public class SwitchsActivity extends AppCompatActivity{

    private ImageView imageswitch;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_switch);
        imageswitch = (ImageView) findViewById(R.id.tv_main_switch);

    }

    public void switchbt(View view){
        boolean switchsa=((Switch)view).isChecked();
        if(switchsa){
            imageswitch.setImageResource(R.drawable.center2);
        }else{
            imageswitch.setImageResource(R.drawable.center1);
        }



    }


Android控件之ProgressBar(进度条),ToggleButton/SwitchBar(开关按钮),SeekBar(拖动条)/RatingBar(等级评分)

4.SeekBar(拖动条)

      SeekBar就和ProgressBar(进度条)的图形是一样的,不过SeekBar它可以自动拖动,而进度条它是自己加载的,SeekBar我们一般是用在音量调节、手机亮度调节、对图片的透明度进行调节等等,

<SeekBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:id="@+id/sb_main_seekbar"
    />

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.SeekBar;

/**
 * Created by Administrator on 2017/7/19.
 */

public class SeekbarActivity extends AppCompatActivity {

    private ImageView imageview;
    private int images[]={R.drawable.p6,R.drawable.p7,R.drawable.s2,R.drawable.s1,R.drawable.s10};
    private int curentimage=0;
    private SeekBar seekbar;
    private int process=0;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seekbar);

          //得到图片id
        imageview = (ImageView) findViewById(R.id.iv_main_imageview01);
        imageview.setImageResource(images[curentimage]);
         //得到seekbar按钮的id
        seekbar = (SeekBar) findViewById(R.id.sb_main_seekbar);
        seekbar.setMax(255);
        seekbar.setProgress(255);
        seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
             @Override
             public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                  process=i;
             }

             @Override
             public void onStartTrackingTouch(SeekBar seekBar) {
              imageview.setImageAlpha(process);
             }

             @Override
             public void onStopTrackingTouch(SeekBar seekBar) {

             }
         });

    }

Android控件之ProgressBar(进度条),ToggleButton/SwitchBar(开关按钮),SeekBar(拖动条)/RatingBar(等级评分)

5.RatingBar(等级评价)

  RatingBar一般都是用在给商家评价中,它是星星的图形,我们应该是对它常用的,也不陌生。

<RatingBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:id="@+id/rb_main_ratingbai"
    />


import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.Toast;

/**
 * Created by Administrator on 2017/7/19.
 */

public class RatingbarActivity extends AppCompatActivity {

    private ImageView imageview;
    private int images[]={R.drawable.p6,R.drawable.p7,R.drawable.s2,R.drawable.s1,R.drawable.s10};
    private int curentimages=0;
    private RatingBar ratingbar;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ratingbar);

          //得到图片id
        imageview = (ImageView) findViewById(R.id.iv_main_imageview02);
        imageview.setImageResource(images[curentimages]);

        //得到ratingbar按钮id
        ratingbar = (RatingBar) findViewById(R.id.rb_main_ratingbai);
        ratingbar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float v, boolean b) {
                Toast.makeText(RatingbarActivity.this, " 当前好评为:"+v, Toast.LENGTH_SHORT).show();

            }
        });

    }

  
}

Android控件之ProgressBar(进度条),ToggleButton/SwitchBar(开关按钮),SeekBar(拖动条)/RatingBar(等级评分)


图片ScaleType属性

Android控件之ProgressBar(进度条),ToggleButton/SwitchBar(开关按钮),SeekBar(拖动条)/RatingBar(等级评分)