控制元件拖動後,某些事件引起的佈局重置或位置還原問題
阿新 • • 發佈:2019-01-08
自定義了一個imageview控制元件,可以隨意拖動和縮放。
遇到了一個棘手的問題,就是每當拖動完控制元件以後,執行某些操作的時候(比如說觸發虛擬鍵盤),該控制元件的位置就會還原到初始位置。
經過嘗試,問題已經解決,
解決方法是:捕捉ACTION_UP動作,當發現這個動作以後執行方法onTouchUp()
附上該方法程式碼如下
<span style="font-size:18px;">void onTouchUp(MotionEvent event) { RelativeLayout.LayoutParams param=new RelativeLayout.LayoutParams(Width,Height);//Width、Height是操作之後的圖片寬度和高度 param.leftMargin = left;//操作之後控制元件左上角的橫座標 param.topMargin = right;//操作之後控制元件左上角的縱座標 img.setLayoutParams(param); }</span>
至於控制元件的Width、Height、Left、Right等資訊,最好是直接從自定控制元件中建一個方法來獲取,比如獲取圖片寬度可以在自定義控制元件中新增如下程式碼:
/** 獲取圖片寬度 **/
public int getimg_W() {
return this.getWidth();
}
在呼叫程式中使用param.height=控制元件名.getimg_W;
猜測原因:因為拖動的控制元件是一個自定義控制元件,在控制元件被拖動時,其實控制元件在佈局中的位置並沒有真正發生變化。所以當有事件觸發佈局發生變化時,該控制元件的位置會被還原。這裡使用的方法是每當拖動操作完成時會有觸發一個