Android 自定義View可拖動移動位置及邊緣拉伸放大縮
首先說一下定義這樣一個View有什麼用?在一些app中,需要設定頭像,而使用者選擇的圖片可能是使用攝像頭拍攝,也可能是選擇的相簿裡面的圖片,總之,這樣的圖片大小不一,就比如在使用某個聊天軟體的時候,設定頭像,需要對圖片進行擷取.
要實現這樣一個功能,首先,需要分析使用者的操作,即使用者所點選的View的位置,如下圖,我把View分為9個區域,
- 當ACTION_DOWN時如果座標為1.2.3.4四個區域,則對View進行相應的左上/右上/左下/右下拉伸;
- 當ACTION_DOWN時如果座標為5.6.7.8四個區域,則分別對上/右/下/左四個方向進行拉伸;
- 當ACTION_DOWN時如果座標為9這個區域,則對View進行移動;
理論分析完成,下面來看具體實現;
在下面的類中,有五個方法center/left/top/bottom/right分別對應移動/向左拉伸/向上拉伸/向下拉伸/向右拉伸,當Action_down為1-4所在的區域時,組合前面的對應的兩個拉伸方法即可,如左上角拉伸則對應執行left+top方法,這也是把四個單獨一條邊的邊緣拉伸獨立出來的原因;
在View中,我設定了View的最小寬度和高度,都是200,所以當用戶點選邊緣進行縮小操作時,能縮小的最小值也就是200;分別在left/top/bottom/right中體現;
public class DragScaleView extends View implements OnTouchListener
{