Анимация новых элементов в ListView
Как обновить новые элементы в ListView
?
У меня есть adapter
, и когда я добавляю новые элементы в свой список, я говорю adapter.notifyDataSetChanged();
, что элементы добавляются, все работает отлично, но моя проблема в том, что я хочу, чтобы новый добавленный элемент имел некоторую анимацию.
Ответы
Ответ 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()
, чтобы поместить все на место.