控件拖动后,某些事件引起的布局重置或位置还原问题

自定义了一个imageview控件,可以随意拖动和缩放。

遇到了一个棘手的问题,就是每当拖动完控件以后,执行某些操作的时候(比如说触发虚拟键盘),该控件的位置就会还原到初始位置。

经过尝试,问题已经解决,

解决方法是:捕捉ACTION_UP动作,当发现这个动作以后执行方法onTouchUp()

附上该方法代码如下

void onTouchUp(MotionEvent event) {
		RelativeLayout.LayoutParams param=new RelativeLayout.LayoutParams(Width,Height);//Width、Height是操作之后的图片宽度和高度
		param.leftMargin = left;//操作之后控件左上角的横坐标
		param.topMargin = right;//操作之后控件左上角的纵坐标
		img.setLayoutParams(param);
	}

至于控件的Width、Height、Left、Right等信息,最好是直接从自定控件中建一个方法来获取,比如获取图片宽度可以在自定义控件中添加如下代码:

/** 获取图片宽度 **/
	public int getimg_W() {
		return this.getWidth();
	}
在调用程序中使用param.height=控件名.getimg_W; 


猜测原因:因为拖动的控件是一个自定义控件,在控件被拖动时,其实控件在布局中的位置并没有真正发生变化。所以当有事件触发布局发生变化时,该控件的位置会被还原。这里使用的方法是每当拖动操作完成时会有触发一个ACTION_UP动作,当遇到这个动作时增加一段代码手动将控件最后的位置赋给它。




你可能感兴趣的:(android)