将ListView项目设置为垃圾箱

时间:2011-01-07 16:49:58

标签: android listview animation

在我的ListView下面,我有一个带垃圾桶的栏。

当执行某些操作时,假设它只是单击该项目,我希望该项目可以动画到垃圾桶。这意味着向下移动和水平收缩到宽度为0。

如何实现这一目标?我怀疑它涉及创建项目的位图,然后向下动画该位图并且更小。这也意味着,根据列表项相对于屏幕的位置,它可能需要比其他时间更快地收缩(即:如果列表项已经接近屏幕的底部而不是顶部)。我只是不确定如何实现这一目标。

我完成的唯一动画包括从屏幕底部显示一个小节。我没有移动自由浮动物体并改变其大小的经验。

有人能为我提供一些好的方向吗?

2 个答案:

答案 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。您似乎希望构建由AnimationSetScaleAnimationAlphaAnimation组成的TranslateAnimation。然后将该动画应用于您创建的任何动画以在列表视图上移动。在我的头脑中,我可能会通过创建一个将被删除的项目的副本来处理该方面,并将其设置为“垃圾箱”的动画。然后删除原始项目。但是这种方法可能比创建位图更难/更低效。

相关问题