在我的ListView下面,我有一个带垃圾桶的栏。
当执行某些操作时,假设它只是单击该项目,我希望该项目可以动画到垃圾桶。这意味着向下移动和水平收缩到宽度为0。
如何实现这一目标?我怀疑它涉及创建项目的位图,然后向下动画该位图并且更小。这也意味着,根据列表项相对于屏幕的位置,它可能需要比其他时间更快地收缩(即:如果列表项已经接近屏幕的底部而不是顶部)。我只是不确定如何实现这一目标。
我完成的唯一动画包括从屏幕底部显示一个小节。我没有移动自由浮动物体并改变其大小的经验。
有人能为我提供一些好的方向吗?
答案 0 :(得分:2)
按照以下步骤实现该目标:
首先,您需要创建列表项的“已覆盖”副本。为此,您需要对新视图进行充气,该视图与列表视图中的列表项具有相同的结构。之后,您需要将其添加到Windows管理器,如下所示:
WindowManager.LayoutParams windowParams = new WindowManager.LayoutParams();
windowParams.gravity = Gravity.TOP | Gravity.RIGHT;
windowParams.x = item.getLeft();
windowParams.y = item.getTop();
windowParams.height = item.getHeight();
windowParams.width = item.getWidth();
windowParams.flags =
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
windowParams.format = PixelFormat.TRANSLUCENT;
windowParams.windowAnimations = 0;
View hooveredView = getClonedView(item);
// Add the hoovered view to the window manager, as a new view in the screen
WindowManager mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
mWindowManager.addView(hooveredView, windowParams);
现在,创建新的Animation类,它获取WindowParams,并更改x和y坐标,以便将被覆盖的项目移动到下方的垃圾栏。使用以下代码更新新的视图位置:
mWindowManager.updateViewLayout(mViewToAnimate, mWindowParams);
您还可以使用宽度和高度来模拟视图的缩小。
为了动画列表中剩余的空白点,您可以使用我博客上解释的ExpandAnimation: http://udinic.wordpress.com/2011/09/03/expanding-listview-items/
这就是它。如果您需要更多详细信息 - 请询问。
答案 1 :(得分:0)
就执行动画而言,请查看Animation。您似乎希望构建由AnimationSet
,ScaleAnimation
和AlphaAnimation
组成的TranslateAnimation
。然后将该动画应用于您创建的任何动画以在列表视图上移动。在我的头脑中,我可能会通过创建一个将被删除的项目的副本来处理该方面,并将其设置为“垃圾箱”的动画。然后删除原始项目。但是这种方法可能比创建位图更难/更低效。