android – 将ListView项目设置为垃圾箱

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

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

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

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

有人能给我一些好的方向吗?

最佳答案 请按照以下步骤实现该目标:

首先,您需要创建列表项的“已覆盖”副本.为此,您需要对新视图进行充气,该视图与列表视图中的列表项具有相同的结构.之后,您需要将其添加到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);

现在,创建获取WindowParams的新动画类,并更改x和y坐标,以便将被覆盖的项目移动到下方的垃圾栏.使用以下代码更新新的视图位置:

        mWindowManager.updateViewLayout(mViewToAnimate, mWindowParams);

您还可以使用宽度和高度来模拟视图的缩小.

为了动画列表中剩下的空白点,您可以使用我博客上解释的ExpandAnimation:
http://udinic.wordpress.com/2011/09/03/expanding-listview-items/

这就是它.如果您需要更多细节 – 请问.

点赞