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); } }
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); } }
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) { } }); }
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(); } }); } }
图片ScaleType属性