本帖最后由 kaisuihu 于 2014-10-10 17:47:35 编辑

解决方案 »

  1.   

    我更加怀疑就是4.4的一个bug,因为我派生的那个子控件里面还有view,当我把上面的vP(这就是派生的那个类)换成vP的子view的时候,子View是可以拖动的,所以4.4下面,难道Relative不能通过layout来改变位置了?那应该用什么方法来替代呢
      

  2.   

    你可以使用 view.scrollBy(int x,int y)试试呢?,一般而言,不推荐使用 layout 的
      

  3.   


    单纯的scrollBy应该还不能满足我的需求,在GridLayout里面我是两行x两列(四个)派生控件,某一时刻,只能拖动其中一个,总共有好几个GridLayout并列布局的而按照我的理解,scroll类似的函数应该都是要视图实际大小超出显示区域才能滚动?而我的派生控件在GridLayout里面是完全显示了的
      

  4.   

    我发现,如果我是两行两列的4个子控件,拖动某一个是没有问题的,但是当我改变布局之后——一个GridLayout里面只放一个子控件,这时候子控件就拖不动了
      

  5.   

    我觉得应该是view的触控分发出现了问题,有木有4.4有木有执行 MotionEvent.ACTION_MOVE:  
      

  6.   

    你用的是原生android?会不会是定制系统的bug?
      

  7.   


    看了你这句话,我再去看代码的时候,发现我这个问题提得就不对,没错综问题的本质,也是由于时间久了,有些代码淡忘了,所以原来,我两行两列的时候是把4个子控件放在GridLayout里面,然后在将GraiLayout放入派生的ViewGroup里面,所以他的触控事件应该是受GridLayout来控制~~~然后当我切换成单视图的时候(只有一个派生控件),我不再使用GridLayout,直接把派生控件放到了派生的ViewGroup里面,所以这个时候子控件的触控事件应该是由派生的ViewGroup来控制的,问题就在这儿,派生的ViewGroup里面重写了onInterceptTouchEvent 和 onTouchEvent,所以应该是这个地方有问题,我再理一理
      

  8.   

    当然,也有可能是我派生的ViewGroup的OnLayout 里面处理得不对
      

  9.   


    事实证明,确实是onLayout里面处理得有问题,现在我把onLayout函数在拖动的时候直接返回掉,不做子控件的Layout处理,就行了。以前的android版本居然可以用,让我一直误以为是GridLayout的版本兼容性问题可能是Android4.4及以后对onLayout的处理方式有改变
    谢谢各位了~共勉