我没有详细介绍,我希望能够在ListView
中'滑动'元素,类似于GMail中的'幻灯片存档'功能。我对onTouchListener很好,所有这些,我的问题是关于幻灯片动画。
首先想到的两件事是......
view.setPadding(slideOffset, 0, 0, 0);
和..
view.setX(slideOffset);
前者是非常黄油,即使在模拟器上也是如此 后者在我的Galaxy Nexus上有点笨拙。
我的问题:
*无论我尝试过什么,这样做的正确方法是什么?
为什么setX
不如setPadding
平滑?
一种方法是否比其他方法更符合Android最佳实践?
补间翻译动画是一种选择吗?如果是这样,你能提供一个简短的例子来指出我正确的方向吗?
修改
为了清楚起见,我附上了我试图效仿的效果图像。
答案 0 :(得分:1)
我很确定setX()速度较慢,因为它影响了它的父节点。更改视图的X时,每次更新值时,它都会调用父级的onLayout / onMeasure。这是因为孩子的X值可能导致父母的其他项目移动,因此父母需要重绘自己。
您可以通过扩展ViewGroup并写入这些方法的日志来轻松测试。然后,您可以使用两种方法,padding与setX,并查看会发生什么。
您是否尝试为该项目制作动画?或者您希望用户像在Gmail上一样移动它吗?您可以使用ObjectAnimator处理项目的“X”值。结合物品的“硬件层”,它将创造更流畅的体验。您可以在此处找到有关如何执行此操作的详细信息:http://developer.android.com/guide/topics/graphics/hardware-accel.html
答案 1 :(得分:1)
是的,如果您要定位更高的API,ViewPropertyAnimator可能是一个很好的解决方案。如果你必须支持较低的API,我的实施思路将是(我自己也没有亲自实现,但这应该对性能有益):
在您的触摸处理程序中,一旦您确定用户正在"滑动",请将View的可见性设置为INVISIBLE,并将绘图缓存存储到单独的位图(位图bmp = myView.getDrawingCache();)
在与视图相同的位置绘制该位图,并使用Canvas转换方法根据用户触摸点的x位置移动位置。
用户放手后,转回(最好用动画平滑),回收位图,然后将视图设置回可见。
答案 2 :(得分:1)
查看devBytes上发布的3 AndroidDev: