常用控件二:图片框(ImaImageView)和 进度条(ProgressBar)和消息提示框(Toast)

1.Toast:
activity_main.xml里:

    <Button
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:onClick="studyToast"
         />

MainActivity.java里:

     public void studyToast(View view) {
        Toast.makeText(this, "是不是傻", Toast.LENGTH_SHORT).show();
    }

第一个参数:当前的上下文环境。可用getApplicationContext()或this
第二个参数:要显示的字符串。也可是R.string中字符串ID
第三个参数:显示的时间长短。Toast默认的有两个LENGTH_LONG(长)和LENGTH_SHORT(短),也可以使用毫秒如2000ms

2.图片框(ImaImageView):
注意事项:res下面的资源名不能使用大写字母,特别是图片资源中的图片的文件名,会造成R.java文件丢失,改正确后即可
例如:smallImage.png错误,small_image.png正确
scaleType(缩放类型)
scaleType的属性值有:matrix fitXY fitStart fitCenter fitEnd center centerCrop centerInside

            (扩大或缩小至)
    图片宽度--------------->控件宽度        

它们之间的区别如下:
matrix 用矩阵来绘制(从左上角起始的矩阵区域)

fitXY  不按比例缩放图片,目标是把整个图片塞满整个View

fitStart  把图片按比例扩大或缩小到View的[[[宽度]]],然后置顶部显示(图片会完整显示)

fitCenter  把图片按比例扩大或缩小到View的[[[宽度]]],然后居中显示(图片会完整显示)

fitEnd   把图片按比例扩大或缩小到View的[[[宽度]]],然后置底部显示(图片会完整显示)

center  不缩放,将图片按原来大小居中显示,当图片宽高超过View的宽高时,则截取图片的居中部分显示

centerCrop  按比例扩大(或缩小)图片的size居中显示,使得图片的长宽的[[[等于或大于]]]View的长宽

centerInside  按比例扩大(或缩小)图片的size居中显示,使得图片的长宽的[[[等于或小于]]]View的长宽 (图片会完整显示)

    用得最多还是fitXY fitStart fitCenter fitEnd
    默认是fitCenter

scaleType属性分二种情况分析

     1.1.1 图片比ImageView小(android08_widget03_d01_v1)
            <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginRight="10dp"
            android:background="#FF0000"
            android:scaleType="matrix"
            android:src="@drawable/small_image" />

      1.1.2 图片比ImageView大(android08_widget03_d01_v2)

示例:(图片比ImageView小)

     //ImageView 展示图片的控件
     //图片大小为52x47
      <ImageView
           android:layout_width="100dp"
           android:background="@color/yellow"
           android:src="@drawable/small_image"
           android:scaleType="center"       //居中
           android:layout_height="100dp" />

3.进度条( ProgressBar):
常用属性
style=”?android:attr/progressBarStyleHorizontal” 默认为圆形
android:progress=”33” 最大进度条100%
android:max=”100” 进度条运行到33%

线程休眠
Thread.sleep(100);//抛异常
SystemClock.sleep(100);//不会抛异常

线程注意事项:
不能在主线程中执行耗时的操作,只能在子线程中操作
另外,在子线程中不能操作主线程中的控件(ProgressBar除外)

案例:
xml代码:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

       <FrameLayout
           android:layout_width="match_parent"
           android:layout_height="60dp">
                <TextView
                    android:id="@+id/tv_main_tv1"
                    android:layout_width="60dp"
                    android:layout_height="match_parent" />
          <ProgressBar
              android:id="@+id/pb_main_pb1"
              android:layout_width="match_parent"
              style="?android:attr/progressBarStyleHorizontal"
              android:max="100"
              android:layout_height="60dp" />

    </FrameLayout>

       <Button
           android:id="@+id/bun_main_btn1"
           android:layout_width="100dp"
           android:onClick="setProgess"
           android:orientation="vertical"
           android:layout_height="wrap_content" />

    </LinearLayout>

java代码:

package com.example.t212_a05;

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

public class MainActivity extends AppCompatActivity {
    private ProgressBar pb_main_pb1;//获取控件
    private int progress=0;  //运行进度默认为0
    private TextView tv_main_tv1;
    private myHandler myHandler=new myHandler();

//Handler 类:用于线程之间的通信,比如:主线程与子线程
    private int code=1;
    private class myHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(code==msg.what){  //执行进度条1
                progress++;    //handleMessage里没有progress 所以
                pb_main_pb1.setProgress(progress);
                tv_main_tv1.setText(progress+"%");
            }
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pb_main_pb1=this.findViewById(R.id.pb_main_pb1);  //获取到进度条控件
        tv_main_tv1=this.findViewById(R.id.tv_main_tv1);  //获取到变化的数字控件
    }

    //主线程
    public void setProgess(View view) {
        //设值,执行耗时操作
        if(0==progress){ //进度条为0
            new MyThead().start(); //开启进程
        }
    }

    //子线程
    private class MyThead extends Thread{
        //耗时操作放到子线程里
        //写线程要重写run方法
        public void run() {
            super.run();
           while(true){
               try {
                   Thread.sleep(100);  //休眠
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
               if(progress==100){  //如果进度条加载到100
                   progress=0;   //恢复为0
                   break;
               }
//               progress++;
//               pb_main_pb1.setProgress(progress);  //设值
//               tv_main_tv1.setText(progress+"%");  有误  在子线程中不能操作主线程中的控件(ProgressBar除外)  tv_main_tv1是主线程的控件
               Message msg=new Message();
               msg.what=1;  //what代表哪一个进程
               myHandler.sendMessage(msg); //从子线程传到主线程
           }
        }
    }   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值