1. 程式人生 > >控制元件拖動後,某些事件引起的佈局重置或位置還原問題

控制元件拖動後,某些事件引起的佈局重置或位置還原問題

自定義了一個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; 

猜測原因:因為拖動的控制元件是一個自定義控制元件,在控制元件被拖動時,其實控制元件在佈局中的位置並沒有真正發生變化。所以當有事件觸發佈局發生變化時,該控制元件的位置會被還原。這裡使用的方法是每當拖動操作完成時會有觸發一個

ACTION_UP動作,當遇到這個動作時增加一段程式碼手動將控制元件最後的位置賦給它。