Как анимировать отдельные элементы в ListView

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

Ничто не оживляет - и ничто не терпит неудачу. Следующий фрагмент кода является упрощенной версией того, что я делаю:

private void animateListViewItem()
{
    TranslateAnimation anim = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f,
            Animation.RELATIVE_TO_SELF, -1.0f,Animation.RELATIVE_TO_SELF, 0.0f);
    anim.setDuration(2000);
    View v = fragment.getListAdapter().getView(fragment.getListView().getFirstVisiblePosition(), null, null);
    v.startAnimation(anim);
}

Когда я возился с этим, пытаясь выяснить, в чем дело, я в какой-то момент заменил элемент всем ListView, чтобы исключить анимацию как источник проблемы - вот так.

private void animateListViewItem()
{
    TranslateAnimation anim = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f,
            Animation.RELATIVE_TO_SELF, -1.0f,Animation.RELATIVE_TO_SELF, 0.0f);
    anim.setDuration(2000);
    fragment.getListView().startAnimation(anim);
}

К моему изумлению, это сработало идеально!

Поэтому мой вопрос - почему я не могу анимировать отдельные элементы в ListView? Или я что-то не так делаю?

Спасибо!

Постскриптум Для записи ListView заполнен пользовательскими представлениями (LinearLayouts), и я проверил, что я получаю нужный элемент перед анимацией.

 Sam07 июн. 2012 г., 06:35
Хорошие первые посты (вопрос и ответ). Они понятны, подробны, и если бы были ошибки, вы указали, что отправили бы трассировку logcat; Жаль, что больше участников были такими же тщательными, как и вы Добро пожаловать в переполнение стека!
 bhekman06 июн. 2012 г., 07:49
О, мой плохой. Удачи..
 bhekman05 июн. 2012 г., 22:32
Извините, у меня мало опыта в анимации или манипуляциях с представлениями. Вы пробовали это, хотя: View v = фрагмент.getListView (). GetFirstVisiblePosition ();
 AndroidDev13 июн. 2012 г., 12:15
@ Слушай, я работаю над той же проблемой .. ты можешь сказать мне, что это за фрагмент здесь ... ты можешь показать свой код ......
 Slind06 июн. 2012 г., 07:27
Если вы посмотрите на первый пример кода, это именно то, что я делаю там ... И хотя оно дает мне представление, которое я ищу - это представление не будет анимироваться - и я не понимаю, почему

Ответы на вопрос(1)

Решение Вопроса

View v = fragment.getListAdapter().getView(fragment.getListView().getFirstVisiblePosition(), null, null);

Эта линия была проблемой. Возвращаетnew View для отображения основных данных в указанной позиции в списке, а неexisting View, Итак, вернулисьView не имеет ничего общего со списком.

Вместо этого делаем это:

View v = fragment.getListView().getChildAt(fragment.getListView().getFirstVisiblePosition());

Получил меняView что список использовался и анимация работала как положено.

 Slind07 июн. 2012 г., 08:08
Я буду - спасибо за напоминание.
 07 июн. 2012 г., 06:38
Не забудьте пометить это как ответ.
 Slind06 июн. 2012 г., 08:35
В качестве примечания, это та же самая причина, по которой мои представления не имели никаких измерений, когда я проверял свойства, такие как getX getY и т. Д. Я смотрел на фиктивное представление, а не на реальное представление
 13 июн. 2012 г., 12:20
@Slind, расскажите, пожалуйста, о том, что здесь представляет собой фрагмент и откуда мне следует вызывать метод animateListViewItem () для анимации отдельных элементов.
 Slind19 июн. 2012 г., 09:06
@Anshuman Фрагмент только потому, что я работаю с фрагментом, а не с Activity. Если вы находитесь в ListActivity, просто замените frag.getListView () на getListView (), а остальное должно быть таким же. Кстати, помните, что это упрощенный пример. Поскольку ListView повторно использует виды, вы должны отрегулировать положение в соответствии с тем, какой вид является первым видением в списке.

Ваш ответ на вопрос