Анимация элемента ListView в корзину - PullRequest
4 голосов
/ 07 января 2011

Ниже моего ListView у меня есть панель с мусорной корзиной.

Когда какое-либо действие выполняется, предположим, что это просто щелчок по элементу, я бы хотел, чтобы элемент оживил до мусорной корзины. Это означает как движение вниз, так и сжатие по горизонтали до ширины 0.

Как этого достичь? Я подозреваю, что это включает в себя создание растрового изображения элемента, а затем его анимацию вниз и все меньше. Это также означает, что в зависимости от того, где элемент списка находится относительно экрана, может потребоваться его сжатие быстрее, чем в другое время (т. Е. Если элемент списка уже находится ближе к нижней части экрана, а не к верхней). Я просто не знаю, как этого добиться.

Единственная анимация, которую я сделал, - это отображение панели в нижней части экрана. У меня нет опыта перемещения свободно плавающего объекта и изменения его размера.

Может ли кто-нибудь дать мне какое-нибудь хорошее руководство?

Ответы [ 2 ]

2 голосов
/ 09 октября 2011

Выполните следующие шаги для достижения этой цели:

Во-первых, вам нужно создать «копируемую» копию вашего элемента списка.Для этого вам нужно накачать новое представление, которое имеет ту же структуру, что и элементы списка в вашем списке.После этого вам нужно добавить это в диспетчер окон, например:

            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/

Вот и все.Если вам нужно больше деталей - просто спросите.

0 голосов
/ 08 января 2011

Что касается выполнения анимации, взгляните на Анимация .Похоже, вы захотите построить AnimationSet, состоящий из ScaleAnimation, AlphaAnimation и TranslateAnimation.Затем вы применяете эту анимацию ко всему, что создаете, чтобы перемещаться по списку.Наверху, я бы, вероятно, подошел к этому аспекту, создав копию элемента, который будет удален, анимировал его в «корзину» и затем удалил оригинальный элемент.Но такой подход может быть сложнее / менее эффективным, чем создание растрового изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...