问题描述:
移动一个Linerlayout 包含子元素多个button ,使用位移动画后,发现button的点击区域还在位移前的位置,并没有跟随移动,百思不得解,最后在CSDN发现了解决了方法,感觉这个api 有点不太友好,不知道这样设计的目的是出于什么考虑,但对于使用者来说,确实带来不少麻烦。解决参考 http://bbs.csdn.net/topics/360035885 很久之前的帖子了。
筛选的解决方法:
例如初始位置是0,你要运动到 300
那么你可以new TranslateAnimation(0, 300, 0, 0);来获得位移动画,但是移动后,它会闪回0位置,因为控件实际坐标还是0 (你可以用getX()来测试一下),而如果你用setFillAfter(true)来填充位置,它看起来停留在300了,可是你getX(),它还是0,这种情况就好像控件被拉伸了,但是实际坐标没有变,最要命的是,点击热区不会随控件移动(让人无法接受...)然后这里提出了先移位,再做位置变换,你先visibility-gone,移动好控件位置,再visibility-visible,然后这时候你控件的位置已经在300了,如果这时候你用new TranslateAnimation(0, 300, 0, 0),就会从300移动到600再弹回来,于是做个反向offset,new TranslateAnimation(-300, 0, 0, 0),那么就从0,运动到300,而且不回弹了