最近在捣腾android tv上的动画,之所以说是Android tv 上的动画是因为 Android 盒子的性能普遍会比手机差几个档次。价格也是差了n倍数。所以一些手机上不会出现的问题在盒子上就容易出现。
问题1
Android 设备默认的动画刷新frame率是10ms 但是很多设备都是大于10ms的比如说米四是20ms左右,而乐视盒子是33ms左右。有些盒子是不支持动画的,就是动画 start后 立马就end 了。那么问题来了,普通的视图是没问题的帧刷新率高点低点,但是当有srcoll时,如果同时执行就会出现视图错位,在scroll的同时动画执行了放大缩小或者移动,这时就会错位漂移。
问题2
其实是同一个问题。在viewpager 上下翻页时的 内部view元素的动画会造成漂移。
都是应为scroll 造成的
解决思路:
让scroll 完成了再执行动画,先mark下后续进行补充
问题3,:ScrollView 里放LinearLayout 子view 在ScrollView 滚动时,放大的动画也执行了,如果两个同时执行会导致页面的交叉漂移。
解决方法是 让ScrollView 先滚动滚完 再执行动画 就不会飘
思路1、当获取到焦点时稍微延时一会100ms 再放大(懒惰的做法,会造成ui反应慢一点,不是很舒服)
思路2、监听外部的ScrollView滚动停止了再放大,(实际效果也是有点慢)
监听ScrollView的停止,采用反射的方法参考:http://johnnyshieh.github.io/android/2015/07/17/scrollview-detect-scroll-stop/
思路3、自己重写LinearLayout 注册一个Scroller 滚动器,自己完成滚动效果,(结果比较理想)
自定义容器中实现Scroller参考该博客:http://ipjmc.iteye.com/category/167926
对于判断一个视图是不是在屏幕外参见偶写的坐标篇http://blog.csdn.net/lckj686/article/details/49687809
自己写Scroller的时候要注意一点,就是scroller 的滚动最后是调用的 view 的scrollTo方法,
mScroller.setFinalX(0); scrollTo(0, 0);
但是两者不能混用, 比如直接调用了
scrollTo(0, 0); getScrollX()就是0 但是mScroller.getCurrX() 却没有同步。这样子会照成混乱,如果用了Scroller 尽量就都直接操作mSroller吧,如果有地方要直接操作scrollTo还是要补上mScroller.setFinalX 不然会出问题。 这个还不容易发现