关于多层layout的嵌套问题(转)

1、由于多成Layer嵌套,监听onTouch事件会根据返回值一层层调用,返回false就掉用上层的onTouch事件,直到返回true终止。
例如下面代码:
Java代码
  1. <AbsoluteLayout    
  2.         android:id="@+id/AbsoluteLayout"    
  3.         android:layout_height="fill_parent"   
  4.     android:layout_width="fill_parent"  >  
  5.         <ImageView  
  6.         android:id="@+id/myImageView"   
  7.         android:adjustViewBounds="true"   
  8.         android:maxHeight="72dip"   
  9.         android:maxWidth="72dip"   
  10.             android:layout_width="wrap_content"   
  11.             android:layout_height="wrap_content"   
  12.             launcher:direction="horizontal"  />  
  13. </AbsoluteLayout>  
<AbsoluteLayout	
        android:id="@+id/AbsoluteLayout" 
        android:layout_height="fill_parent"
	android:layout_width="fill_parent" >
     	<ImageView
		android:id="@+id/myImageView"
		android:adjustViewBounds="true"
		android:maxHeight="72dip"
		android:maxWidth="72dip"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
        	launcher:direction="horizontal" />
</AbsoluteLayout>

在ImageView的onTouch事件返回false的情况下,就会调用AbsoluteLayout的onTouch事件。
2、实例分析,在Launcher的主界面加入上面那段代码,想要实现ImageView跟随手指移动的功能。
问题:
中途遇到一个问题就是当我使用ImageView的onTouch事件监听使用手指按住ImageView拖动的时候,ImageView在屏幕 上出现两个相同的图片,并和手指的拖动不协调。而使用AbsoluteLayout的onTouch监听移动事件则能使图片正常移动。
分析:
经过控制台输出onTouch获得的x、y坐标发现,原来不是出现两个ImageView图片,而是一个ImageView图片在两个位置来回闪 动。这表明座标出了问题,对坐标值分析过后发现,使用AbsoluteLayout的onTouch事件监听到的坐标是手指在该 AbsoluteLayout下的坐标,如果AbsoluteLayout是全屏的话,就是屏幕坐标。而ImageView的onTouch事件监听到的 坐标,则是以上一次ImageView所在点为原点(0,0),与当前手指触摸点的相对坐标,这种坐标会出现负数。
解决:
在ImageView的onTouch事件MotionEvent.ACTION_MOVE:中保留上一次ImageView在屏幕中的坐标,在这个基础上进行移动。

上面有个问题没有想通,就是在AbsoluteLayout的onTouch事件中,无法得到该AbsoluteLayout中的ImageView。见下面的代码:
public boolean onTouch(View v, MotionEvent event){
    if(v instanceof ImageView){}
}
这个v始终不是ImageView,而是AbsoluteLayout。所以还不知道怎么在AbsoluteLayout的onTouch事件中得到ImageView的坐标。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值