关闭

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

785人阅读 评论(0) 收藏 举报
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>  

在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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:26654次
    • 积分:377
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:42篇
    • 译文:0篇
    • 评论:2条
    文章分类
    文章存档
    最新评论