在滚动ListView的同时,Android动画执行得更顺畅?

时间:2014-06-14 22:38:08

标签: android performance listview animation optimization

所以我有一个非常简单的活动。它包含一个ListView,用1000个30dp高的空行填充屏幕,所以整个东西看起来是白色的。我有一个红色的空RelativeLayout,它是屏幕的宽度,44dp高在ListView的顶部呈现。我还有一个非常简单的值动画师,通过设置TranslationY属性,在一个周期内在屏幕上上下动画红色条。

我正在使用HTC One,而且我发现动画时我看到酒吧上下都会出现大量口吃。它似乎每隔一两秒就会丢几帧。我似乎没有做任何应该创造任何垃圾的东西..但这里是有趣的部分...当我触摸ListView并向上和向下滚动时,条形动画执行更顺畅。它仍然不完美,但根据我的估计它大约好5倍。我认为这是一些Android优化..也许在ListViews上滚动动画期间给予UI线程更高的优先级?也许它在滚动期间禁用某些后台任务以保持UI线程不被中断?我读过iOS做了一些这样的技巧。我的问题是有人知道Android上发生了什么吗?我已经做了一些谷歌搜索,找不到任何有用的东西。我正处于尝试优化这些动画的最初阶段,但如果有一个技巧我可以使用像特定动画事件期间的UI线程的优先级或任何其他会重现手动滚动ListView的效果似乎对我的动画表现来说,这对我来说是一个巨大的胜利。

除了“不要创建垃圾”和“不要阻止UI线程”之外,任何优化简单动画的一般提示都会很方便。

提前致谢

更新

根据要求,我会发布我的getView方法。在这一点上,我承认我正在使用一个有点奇特的设置。我正在使用带有F#的Xamarin工具链。方法如下:

    override this.GetView(position, view, parent) =
        match view with
        | null -> context.LayoutInflater.Inflate(getLayout(this.get_Item(position)), null)
        | _ -> view
        |> convertView (this.get_Item(position))

向不熟悉语法的人澄清这里发生的事情。方法模式的前3行与view参数匹配,要么返回新的膨胀视图,要么只返回视图本身未触及的视图。 4rth行将该模式匹配表达式的结果作为convertView函数的最后一个参数进行管道,该函数是在此ListAdapter子类的构造函数中传递的函数。这里没有什么特别不寻常的事情。每次调用方法时都没有创建垃圾。但更重要的是,当ListView 无效时,我的动画会执行更糟。因此,动画口吃的来源不能主要与getView方法中的任何内容有关。

0 个答案:

没有答案