圖片的局部伸縮

目標

效果仿照美圖秀秀中的增高功能,主要實現圖片部分區域的伸縮處理。

效果分析

從效果看,明顯的是一個FrameLayout上設置2層,底層爲被操作的圖片,上層是要操作的選擇其餘。上層選好操作區域,通過接口回調把選擇區域的2條高度回調給外部。而後通過配合底部的滑桿(其實就是一個進度條)傳增量值進去進行對應區域的伸縮處理。

關鍵API

canvas.drawBitmap(Bitmap bmp,Rect rectOri,Rect rectDst,Paint paint)

簡單的說明下上述API的各個參數

Bitmap bmp–要進行操作的圖片對象(這裏有個加載圖片的細節,BitmapFactory.decodeResource(…)系列是耗時操作,如果加載的圖片過大會引起OOM。)
Rect rectOri–表示的是Bitmap上要進行處理的矩形區域;
Rect rectDst–表示將上Rect的矩形區域繪製到這個矩形區域,這樣就可以實現圖片的局部伸縮的效果;
Paint paint–畫筆(有時候也經常看到使用null,其實如果不需要類似繪製文字需要設置顏色、字體大小等屬性,完全可以使用null)

小結

  1. 又多認識了一個API的使用方法;
  2. 在上層選擇區域的背景、Icon以及文字顯示與否都使用三元表達式替換了簡單的if-else;
  3. 在上層滑動兩參考線進行區域選擇時以及最上層的對比功能,都重寫了OnTouch事件,進行了事件的攔截處理(《安卓開發藝術探索》是真的沒白看!!!);
  4. 上層的Icon本來給的是很大的,通過Matrix進行了縮放以及平移,認識了高大上的Matrix。
  5. 其實中間還遇到了不少坑,比如選擇區域與實際屏幕圖片的尺寸轉換問題、滑動上層參考線時滑桿置0會調用其OnSeekBarChangeListener引起的圖片驟變問題等等,坑多不怕,主要是能找到原因,一步一步解決坑也是不斷學習的過程.

最後附上代碼:
https://github.com/Haskell2015/MeiTuXiuXiu

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章