Подтвердить что ты не робот

Анимация новых элементов в ListView

Как обновить новые элементы в ListView?

У меня есть adapter, и когда я добавляю новые элементы в свой список, я говорю adapter.notifyDataSetChanged();, что элементы добавляются, все работает отлично, но моя проблема в том, что я хочу, чтобы новый добавленный элемент имел некоторую анимацию.

4b9b3361

Ответ 1

Animate каждый добавленный элемент в методе getView() вашего Custom Adapter.

public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;

    if (v == null) {
        LayoutInflater vi = (LayoutInflater) getActivity()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.simple_list_item_1, null);
    }

    ListData o = list.get(position);
    TextView tt = (TextView) v.findViewById(R.id.toptext);

    tt.setText(o.content);

    Log.d("ListTest", "Position : "+position);
    if(flag == false) {
        Animation animation = AnimationUtils
                .loadAnimation(getActivity(), R.anim.slide_top_to_bottom);
        v.startAnimation(animation);
    }
    return v;
}

И тем самым достигнем Animation.

Ответ 2

Официальные документы об анимации в Android говорят, что вы можете настроить анимацию для запуска всякий раз, когда макет изменяется, используя android: animateLayoutChanges = "true" .

Взято из: http://developer.android.com/training/animation/layout.html

Ответ 3

Добавление такого рода анимаций сложнее, чем я думал. В зависимости от типа анимации, которую вы пытаетесь достичь, есть два способа.

Это довольно взломать, но единственный способ добавить анимацию в ListView children:

Вы можете попытаться уведомить адаптер об идентификаторе объекта, который вы хотите удалить, и вызвать adapter.notifyDataSetChanged();. Это вызовет вызовы адаптера getView(). Внутри вы можете сделать что-то вроде:

if ( item.getId() == itemToRemove ) {
 //apply the animation
}

После завершения анимации вы можете вспомнить adapter.notifyDataSetChanged(), чтобы поместить все на место.