天天看點

android view設定按鈕顔色_圖解 Android 開發中的 View 對象,補補基礎吧!

Android 中 View 的分類

  • 單一視圖:如 TextView / ImageView 等某個特指的View
  • 視圖組:如LinearLayout / RelativeLayout 等多個單一視圖組成的ViewGroup

Android 中 View 的簡介

  • View 類是 Android 中所有元件的基類,包括ViewGroup
  • Android 中所有元件都由 View、ViewGroup 組成
  • View 的構造函數共四個,自定義View 時候必須重寫至少一個構造函數,具體如下:
/** * @des 自定義 View 執行個體 * @author liyongli 20190213 * */public class CustomCircleView extends View { // 當 View 是在 Java 代碼中被 new 出對象時,會調用此函數 public CustomCircleView(Context context) { super(context); } // 當 View 是在 xml 布局檔案中被聲名時,會調用此函數 public CustomCircleView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } // 此函數不會被自動調用,一般會在第二個函數中調用,比如給 View 設定 style 屬性時 public CustomCircleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } // API 21 之後才使用,此函數不會被自動調用,一般會在第二個函數中調用,比如給 View 設定 style 屬性時 public CustomCircleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); }}
           

Android 中 View 的視圖結構

一般來講,我們看到的都是多 View 的視圖,它是樹形結構的。

重點看下圖中橘黃色包含的部分:

android view設定按鈕顔色_圖解 Android 開發中的 View 對象,補補基礎吧!

重點看圖中橘黃色包含的部分

  • 請謹記:無論是 measure、layout、draw,都是從樹的根節點開始測量與計算,一層層的樹形遞歸下來,最終計算整個樹中的各個 View ,最終确定整個 View 樹的相關屬性。

Android 中的坐标系

  • 原點 O:螢幕的左上角為原點
  • X 軸:原點向右為 X 軸增大方向
  • Y 軸:原點想下為 Y 軸增大方向
android view設定按鈕顔色_圖解 Android 開發中的 View 對象,補補基礎吧!

數學坐标系與 Android 螢幕坐标系的差別

android view設定按鈕顔色_圖解 Android 開發中的 View 對象,補補基礎吧!

Android 中 View 位置的設定

  • View 的位置由4個頂點決定,分别為 A、B、C、D
android view設定按鈕顔色_圖解 Android 開發中的 View 對象,補補基礎吧!

請謹記:View 的位置是相對于父控件而言的,4個頂點的位置描述分别由4個值決定:

  1. Top:子 View 上邊界到父View 上邊界
  2. Left:子 View 左邊界到父 View 左邊界
  3. Bottom:子 View下邊界到父View 上邊界的距離
  4. Right:子 View 右邊界到父 View 左邊界的距離
android view設定按鈕顔色_圖解 Android 開發中的 View 對象,補補基礎吧!

建議記憶方法:子 View 的位置是根據父 View 左邊距和上邊距來确定的。

Android 中 元件位置擷取方式

  • View位置的擷取:通過view.getxxx() 方法擷取:
// 擷取Top位置public final int getTop() {  return mTop; } // 其餘如下: getLeft(); //擷取子View左上角距父View左側的距離 getBottom(); //擷取子View右下角距父View頂部的距離 getRight(); //擷取子View右下角距父View左側的距離
           
  • 與 MotionEvent 中 get() 和 getRaw() 的差別
//get() :觸摸點相對于其所在元件坐标系的坐标 event.getX();  event.getY();//getRaw() :觸摸點相對于螢幕預設坐标系的坐标 event.getRawX();  event.getRawY();
           
android view設定按鈕顔色_圖解 Android 開發中的 View 對象,補補基礎吧!

Android 中的「角度(angle)」與「弧度(radian)」

  • 自定義 View 實際上是将不同的形狀通過計算并組合到一起形成的效果。這會涉及到畫布的相關操作(旋轉)、正餘弦函數計算等,即會涉及到角度(angle)與弧度(radian)的相關知識。
  • 角度與弧度都是描述角的一種度量機關:
android view設定按鈕顔色_圖解 Android 開發中的 View 對象,補補基礎吧!

在預設的螢幕坐标系中,角度的增大方向為順時針:

android view設定按鈕顔色_圖解 Android 開發中的 View 對象,補補基礎吧!

但在常見數學坐标系中,角度的增大方向為逆時針(腦補腦補腦補)

Android 中的 Color

Android 中的顔色相關内容需要我們掌握的是顔色模式、建立顔色的方式,以及顔色的引用方式

顔色模式

android view設定按鈕顔色_圖解 Android 開發中的 View 對象,補補基礎吧!

顔色的建立方式

  • 在 java 中建立
//Color類是使用ARGB值進行表示// 指定色值int color = Color.parseColor("#FFFFFF");// 灰色int color = Color.GRAY; //灰色//半透明紅色int color = Color.argb(127, 255, 0, 0);//帶有透明度的紅色int color = 0xaaff0000;  
           
  • 在 xml 中建立
<?xml version="1.0" encoding="utf-8"?> //定義了紅色(沒有alpha(透明)通道) #ff0000 //定義了藍色(沒有alpha(透明)通道) #00ff00 // #f00 低精度 - 不帶透明通道紅色 // #af00 低精度 - 帶透明通道紅色 // #ff0000 高精度 - 不帶透明通道紅色 // #aaff0000 高精度 - 帶透明通道紅色
           

顔色的引用方式

  • 在 java 中引用
//方法1int color = getResources().getColor(R.color.mycolor);//方法2(API 23及以上)int color = getColor(R.color.myColor); 
           
  • 在 xml 中引用
android:background="@color/red"   android:background="#ff0000" 
           

基礎知識篇到此完畢,進階篇完善中!

PS:如果本文對您有幫助,煩請點贊 或 分享轉發哦!

筆者将持續更新更多技術幹貨、技術知識及最新技術動态!

android view設定按鈕顔色_圖解 Android 開發中的 View 對象,補補基礎吧!
android view設定按鈕顔色_圖解 Android 開發中的 View 對象,補補基礎吧!

繼續閱讀