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

来源:互联网 发布:北京精雕如何编程 编辑:程序博客网 时间:2024/06/14 12:09

自定义了一个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动作,当遇到这个动作时增加一段代码手动将控件最后的位置赋给它。




0 0
原创粉丝点击