當前位置:首頁 » 安卓系統 » 安卓實時更新圖片的控制項叫什麼

安卓實時更新圖片的控制項叫什麼

發布時間: 2025-07-29 19:58:10

A. 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矩陣的應用。

B. 安卓桌面小部件Widget的局限性及適用性

一、Widget並不支持所有的控制項跟布局,而僅僅只是支持Android布局和控制項的一個子集。(當然也不支持自定義View)

1.支持的布局:

2.支持的控制項:

二、Widget不支持Animation動畫。

1.可以通過Bitmap、layoutAnimation和幀動畫實現動畫效果:

用這些方式雖然可以實現簡單的動效,但是非常容易產生內存溢出問題,導致OOM和閃退。歸根結底,Widget的設計是主打輕量化,需要長期放在桌面的Widget如果有大量動效,將會耗費大量系統性能和電量,這與它的設計初衷是相違背的。

2.動畫效果和方位感測器測試:

動效:使用 setImageViewBitmap 方法設置簡單的旋轉動畫,動畫會在兩基吵乎分鍾後停止播放。

感測器:在應用進入後台,執行 onStop 方法時,方位感測器會在一分鍾後停止監聽回調,此時後台Service正常運行,Widget時間正常更新,但是方位傳碰正感器不再回調監聽。(經測試,開啟前台Service才可以正常監聽)

總結:非常不建議Widget需要動畫或者調用感測器展示,在部分手機上會提示耗電異常,強制殺死程序。

三、進程保活:

進程保活涉及到的問題搏悉非常復雜,且越來越嚴格。測試了三款APP:

順歷:清除後台任務後Widget時間停止更新。

萬年歷:正常更新。

中華萬年歷:正常更新。

總結:順歷未設置保活方案,或保活失敗。

萬年歷與中華萬年歷監聽了系統時區改變廣播、時間手動設置廣播,在手動設置時間或時區後這兩個Widget也同步更新。同時還有一個時間正常流逝的廣播,系統每分鍾會發送一次,但是這個廣播在8.0系統以後不允許靜態注冊,也就是只能在APP運行的情況下才能監聽這個廣播。尚不清楚這兩個APP如何保活,或是如何在8.0以上系統監聽這個廣播,達到即便殺死後台,也能每分鍾刷新Widget時間的目的。

關鍵詞「輕量化」

1.因為Widget主打輕量化,對動效支持較差,所以Widget界面以靜態界面為主。

2.支持的布局和控制項非常少,不支持自定義View,界面以簡易布局為主。(如圖片+文字)

3.實時性要求不高。(如每日一首古詩)

4.與用戶簡單互動。(如播放器的播放、暫停、下一曲)

熱點內容
少年行安卓版怎麼下載 發布:2025-07-30 07:56:56 瀏覽:513
桌面不能建文件夾 發布:2025-07-30 07:55:26 瀏覽:577
伺服器ip登陸 發布:2025-07-30 07:49:19 瀏覽:816
游戲打金用什麼配置 發布:2025-07-30 07:49:16 瀏覽:424
阿里rds資料庫 發布:2025-07-30 07:33:02 瀏覽:696
c語言算平方 發布:2025-07-30 07:31:26 瀏覽:810
重啟路由器登錄密碼口令是什麼 發布:2025-07-30 07:24:56 瀏覽:894
vivot1存儲類型 發布:2025-07-30 07:16:22 瀏覽:737
項目和編程 發布:2025-07-30 07:09:13 瀏覽:338
在線答題試卷存儲系統設計 發布:2025-07-30 07:09:07 瀏覽:28