導航:首頁 > 操作系統 > android自定義控制項方法

android自定義控制項方法

發布時間:2025-08-03 18:47:20

1. android自定義控制項 怎樣設置內邊距

自定義控制項,實質是重寫某個控制項的方法和屬性,同時也繼承父控制項的方法和屬性,比如內邊距,設置自定義控制項內邊距的方法: 在xml布局文件中使用標簽: android:padding="", android:paddingLeft="", android:paddingTop="", android:bottom="" 如果想要設置外邊距,使用下面標簽: android:layout_margin="",android:layout_marginLeft,android:layout_marginRight,android:layout_marginTop,android:layout_marginBottom

2. Android自定義控制項之可平移、縮放、旋轉圖片控制項

先上效果圖

源碼

單點拖動圖片對圖片進行平移操作。雙手縮放圖片大小和旋轉圖片到一定的角度。圖片縮放的時候 不能大於最大的縮放因子和小於最小的縮放因子。大於最大縮放因子或者小於最小縮放因子需要對圖像進行回彈。圖片旋轉的角度只能為90度的倍數,不滿足90度要進行回彈。圖片回彈要一個漸變的效果。

大體思路: 首先,Android中提供了Matrix類可以對圖像進行處理。其次,要顯示一張圖片最容易想到的就是ImageView。回彈要求漸變的過程,可以通過屬性動畫進行設置。所以大體的思路是:繼承ImageView,重寫onTouchEvent()方法,判斷事件類型,在對應的事件使用Matrix對圖像進行變換。
Matrix是一個已經封裝好的矩陣,最重要的作用就是對坐標點進行變換。
舉個栗子:
1.某個點(x0,y0,1)通過單位矩陣E映射得到的點還是(x0,y0,1)。

3.點(x0,y0,1)通過矩陣T映射得到的點就會做如下的變換

可以看到點(x0,y0,1)經過T矩陣在x軸方向上平移了dx,在y軸方向上平移了dy。

通過以上的變換可以得到具體的思路: 我們維護一個圖像對應的矩陣mCurrentMatrix,該矩陣主要是對ImageView中的圖像的各個點進行映射。ImageView在容器位置擺放完成之後,置mCurrentMatrix矩陣為單位矩陣。當onTouchEvent()方法中觸發單點觸控並且手指進行平移的時候,調用矩陣mCurrentMatrix的postTranslate(dx,dy),對mCurrentMatrix進行變換。當手指抬起,利用變換結束後的矩陣對圖像的各個點進行映射,從而得到平移變換後的圖像。同理可得,在兩只手指進行縮放旋轉的時候,我們對矩陣mCurrentMatrix進行各種變換,當縮放旋轉的事件結束再利用變換完的矩陣去映射圖像的各個點,從而得到縮放、旋轉後的圖像。

安卓自定義View進階 - Matrix原理
安卓自定義View進階 - Matrix詳解

首先理清事件的邏輯:

初始化圖像大小和位置

縮放圖像大小和控制項大小自適應,平移圖像中心和控制項中心重合

onTouchEvent()函數

平移操作

將圖像對應的矩陣進行變換。

縮放操作

mBoundRectF為記錄圖像邊界的矩形。縮放的時候選取圖像的中心進行縮放。

旋轉操作

旋轉的時候旋轉的旋轉中心也是圖像的中心

圖像中各個點的映射

調用ImageView的setImageMatrix(Matrix matrix)會讓ImageView根據設置的matrix去重新繪制圖像。

更新圖像的矩形邊界

獲得圖像的矩形,並根據矩陣映射矩形各個點的坐標。

縮放回彈

旋轉回彈

一些計算方法

要求圖像的變換是一個漸變的過程,很容易想到的就是屬性動畫。因為屬性動畫本身就是對值進行不斷set的過程。而我們維護的矩陣也是一個值,所以很自然可以想到,如果得到回彈之前的矩陣的值以及回彈之後矩陣的值,就可以根據動畫監聽器中動畫當前的系數值去改變矩陣的值。

對animator對象設置完監聽器之後,就可以在手指抬起的時候調用屬性動畫的start()方法開啟動畫。

自定義可平移、縮放、旋轉的控制項主要點有兩個方面:一是onTouchEvent()中判斷平移、旋轉、縮放的觸發條件,平移位移量、縮放比例因子、旋轉角度的計算。二是Matrix矩陣的應用。

3. Tasker beta如何實現Android 11電源菜單控制項的自定義圖塊添加

Tasker beta 5.9.4及以上版本可以通過以下步驟實現Android 11電源菜單控制項的自定義圖塊添加

  1. 確保Tasker版本

    • 首先,確保你安裝的是Tasker Beta 5.9.4或更高版本,因為這些版本才支持Android 11電源菜單控制項的自定義功能。
  2. 進入Tasker設置

    • 打開Tasker應用,進入其主界面。
    • 在主界面或設置菜單中,找到與電源菜單控制項相關的設置項。
  3. 創建或選擇任務

    • 你需要創建一個或多個任務,這些任務將在電源菜單中作為自定義圖塊執行。
    • 可以為每個任務設置不同的行為,如切換設置、運行腳本等。
  4. 自定義電源菜單圖塊

    • 在Tasker的電源菜單控制項設置中,添加你希望顯示在電源菜單中的自定義圖塊。
    • 為每個圖塊選擇或創建相應的圖標和標題,以符合你的個性化需求。
    • 設置圖塊觸發的任務,即當你點擊該圖塊時,將執行的任務。
  5. 保存並應用設置

    • 完成自定義設置後,保存更改。
    • 接下來,當你按下電源鍵並打開電源菜單時,應該能看到你添加的自定義圖塊。
  6. 進一步定製

    • Tasker Beta 5.9.4還引入了「電源菜單操作」功能,允許你深度定製這些菜單按鈕的每一個細節,包括文字描述、圖標樣式和執行的命令
    • 你可以根據需要,進一步調整和優化每個自定義圖塊的行為和外觀。

通過以上步驟,你就可以在Android 11設備上,通過Tasker beta實現電源菜單控制項的自定義圖塊添加了。

4. 【Android】自定義Spinner控制項及其使用

一、簡單使用

1. 寫選項值

在res/values/文件夾下新建一個 arrays.xml 文件:

2. 在界面文件中添加Spinner控制項

activity_main.xml 文件:

2.1 dropdown模式

效果:

2.2 dialog模式

效果:

二、自定義dropdown樣式

1. 修改點擊樣式和下拉框樣式

在res/drawable/文件夾下新建兩個文件:

(1)shape_for_custom_spinner.xml 文件(用來定義下拉框的樣式):

(2)selector_for_custom_spinner文件(用來定義Spinner控制項本身的樣式,帶選擇器,有點擊效果):

在界面文件中的Spinner控制項中引用它們:

效果:

2. 增加下劃線

在res/values/文件夾下新建一個style.xml文件:

說明: (1)customTheme——自定義主題樣式,引用它自定義下劃線才能正常顯示。 (2)customSpinnerStyle——自定義的Spinner樣式,和上面的主題樣式一樣在界面文件中引用。 (3)android:divider——分割線顏色。 (4)android:dividerHeight——分割線寬度。

在界面文件中的Spinner控制項中引用它:

效果:

三、動態配置Spinner選項

1. 刪除界面文件中引入的字元串組

即,刪除這一行:

2. 增加一個自定義的layout文件來配置列表樣式

在res/layout/文件夾下新建一個item_for_custom_spinner.xml文件:

3. 在java文件中對Spinner控制項進行配置

MainActivity.java文件:

說明: 不想自己自定義列表樣式可以選擇直接使用Android自帶的support_simple_spinner_dropdown_item 效果:

四、Spinner選擇事件

1. 增加一個簡單的選擇監聽器

可以發現有兩個問題: (1)初始化監聽器的時候事件被調用了。 (2)重復點擊同一選項事情不會被重復調用。

2. 不希望監聽器動作初始化時就被調用

辦法很簡單,就是定義一個flag用來確認監聽器是否是第一次被調用,是則忽略它:

這樣一來,界面初始化時就不會出現監聽器動作被執行了一次的情況了。

3. 不希望重復點擊同一選項時沒有動作

需要重寫Spinner控制項的部分代碼。

(1)在java/com.example.myapplication/文件夾下新建一個ReSpinner.java文件:

(2)替換掉界面文件中的控制項根名稱,其他什麼都不用動: 將

改為

這樣一來,重復點擊同一事件,也能正常多次觸發監聽器動作了。

五、自定義dialog樣式

經過上面的修改,基本已經完成了對dropdown模式下的樣式自定義和監聽器動作自定義了,將spinnerMode改回dialog,增加一個prompt標簽,增加dialog的標題:

(1)先在res/values/strings.xml文件中定義一個標題(必須步驟):

(2)再在邊界文件中引用它:

5. Android 自定義控制項 layout

Android 繪制流程

View :View主要執行layout方法,使用 serFrame 方法來設置本身 View 的四個頂點的位置,確定View本身的位置。
ViewGroup :ViewGroup主要執行onLayout方法,遞歸遍歷所有子View,確定子View的位置。

我們來看ViewRootImpl中的 performLayout() 方法

看到這里,那host.getMeasuredWidth() / host.getMeasuredHeight()是什麼?它是直接調用View中的方法,其實就是經過measure後的DecorView的測量寬度和高度。在 Android 自定義控制項 measure 中有說明。

2.3.2.1 我們先來看ViewGroup中的 layout() 方法

ViewGroup裡面的layout最終會調入到父類View中的layout,View的layout後面講解。這里可以先告訴大家,最終會調用View的onLayout方法,而ViewGroup的onLayout是抽象方法,所以它的子類LinearLayout必須要實現。

2.3.2.2 我們再來看LinearLayout中的 onLayout() 方法。

2.3.2.3 挑一個縱向的吧,我們再來看LinearLayout中的 layoutVertical() 方法。

2.3.2.4 我們再來看LinearLayout中的 setChildFrame() 方法。

又一次回到了View的layout方法,接下來就看View分發的layout。

我們先來看View中的 layout() 方法。

我們先來看View中的 onLayout() 方法。

空空如也,其實View的布局由父容器決定,所以空實現是正常的,當然也可以在自定義View中進行更改。

《Android 視圖模塊 全家桶》

Android開發之自定義控制項(二)---onLayout詳解
自定義View Layout過程 - 最易懂的自定義View原理系列(3)

閱讀全文

與android自定義控制項方法相關的資料

熱點內容
初遇app師徒是干什麼的 瀏覽:6
學習文學用什麼app 瀏覽:735
寶塔主升浪源碼 瀏覽:967
什麼是國產伺服器 瀏覽:547
壓縮機開關圖片 瀏覽:496
我的世界伺服器實體碰撞怎麼關 瀏覽:773
二校pdf 瀏覽:328
命令模式如何進去 瀏覽:978
編譯框嗎 瀏覽:484
怎麼操作阿里雲伺服器來賺錢 瀏覽:193
絕地求生伺服器怎麼抽 瀏覽:19
貼標簽的app叫什麼 瀏覽:999
二級代理伺服器地址 瀏覽:435
怎麼加密文件夾嗎 瀏覽:861
perl源碼編譯生成庫 瀏覽:585
做一個教育app有什麼資源可以利用 瀏覽:506
安卓手機如何遷移蘋果 瀏覽:964
浙江大學java 瀏覽:571
在文件夾中怎麼新建256色點陣圖 瀏覽:59
大話設計模式python 瀏覽:611