1. 程式人生 > >toast彈框、imageview、進度條、子執行緒訪問主執行緒(執行緒中的通訊handler)

toast彈框、imageview、進度條、子執行緒訪問主執行緒(執行緒中的通訊handler)

  1、imageview
  
   ?xml version="1.0" encoding="utf-8"?>

<ImageView
android:layout_width=“200dp”
android:layout_marginLeft=“100dp”
android:src="@drawable/small_image" //不設定屬性情況下的預設
android:scaleType=“matrix” //設定其圖片位置屬性
android:background="@color/colorPrimary"
android:layout_height=“100dp” />

1、不設定屬性的預設情況 ![不設定屬性的預設情況](https://img-blog.csdn.net/20181020182558766?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0tpZFNobWlseQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 2、多種圖片屬性的設定 ![設定圖中任意屬性改變圖片 01.圖比ImageView小 ](https://img-blog.csdn.net/20181020183028929?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0tpZFNobWlseQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) ![02.圖片比ImageView大](https://img-blog.csdn.net/20181020183321376?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0tpZFNobWlseQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

1.2 ImageView
2.0 注意事項:res下面的資源名不能使用大寫字母,特別是圖片資源中的圖片的檔名,會造成R.java檔案丟失,改正確後即可
例如:smallImage.png錯誤,small_image.png正確

2.1 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)

2、進度條
進度條100%動態展示

----程式碼展示

<?xml version="1.0" encoding="utf-8"?>

<!--imageView 圖片-->

<FrameLayout
    android:layout_width="match_parent"
    android:layout_margin="60dp"
    android:layout_height="80dp">

    <TextView
        android:layout_width="match_parent"
        android:id="@+id/tv_main_downloadShow"
        android:textSize="30dp"
        android:layout_marginLeft="200dp"
        android:layout_height="wrap_content" />

    <!-- 進度條-->
    <ProgressBar
        android:layout_width="match_parent"
        android:id="@+id/pd_main_download"
        android:layout_marginTop="10dp"
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        android:layout_height="20dp" />

</FrameLayout>


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

package com.example.myapplication06;

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

public class MainActivity extends AppCompatActivity {
private ProgressBar pd_main_download;
private TextView tv_main_downloadShow;
private int processCode = 0;
private Handler myHander = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
processCode++;
tv_main_downloadShow.setText(processCode + “%”);
pd_main_download.setProgress(processCode);
break;
default:
break;
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    pd_main_download = findViewById(R.id.pd_main_download);
    tv_main_downloadShow = findViewById(R.id.tv_main_downloadShow);

}
//執行緒在安卓4.0版本後所有耗時操作都寫而在了子執行緒裡面

public void download(View view) {
    if (processCode == 0) {
        new MyThread().start();
    }
}


class MyThread extends Thread {
    @Override
    public void run() {
        super.run();
        while (true) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (processCode == 100) {
                processCode = 0;
                break;
            }
            Message msg = new Message();
            msg.what = 1;
            myHander.sendMessage(msg);
        }
    }
}

}

2.2 進度條 ProgressBar
2.2.1 常用屬性
style="?android:attr/progressBarStyleHorizontal" 預設為圓形
android:progress=“33”
android:max=“100”

  執行緒休眠
  Thread.sleep(100);//拋異常
  SystemClock.sleep(100);//不會拋異常

3.2.2 執行緒注意事項:
不能在主執行緒中執行耗時的操作,只能在子執行緒中操作
另外,在子執行緒中不能操作主執行緒中的控制元件(ProgressBar除外)
private class MyThread extends Thread{

 SubThread->MainThread    錯誤

2.2.3 Handler(重點、面試問得比較多)
用於執行緒之間的通訊,比如:主執行緒與子執行緒
private Handler myHandler = new Handler(){

2.2.4 執行緒小結
SubThread->MainThread 錯誤
SubThread->Handler->MainThread 正確