Wdrażam BaseAdapter
i używam TłumaczAnimacji dla pojedynczego elementu listy.Przywróć przesunięcie x elementu listy do wyświetlenia
Problem polega na tym, że podczas przewijania w dół inne widoki mają takie samo przesunięcie.
Oto moja wdrożenie metody getView()
:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
//initialization code
convertView.setTag(viewHolder);
} else {
viewHolder =(ViewHolder) convertView.getTag();
}
Animation animation;
switch (item.getAnimationDirection()) {
case AnimationDirection.HIDE:
animation = new TranslateAnimation(itemOffset, 0, 0, 0);
animation.setDuration(200);
animation.setFillAfter(true);
viewHolder.layoutToAnimate.setAnimation(animation);
item.setAnimationDirection(AnimationDirection.HIDDEN);
break;
case AnimationDirection.REVEAL:
itemOffset = viewHolder.remove.getWidth() + 20;
animation = new TranslateAnimation(0, itemOffset, 0, 0);
animation.setDuration(200);
animation.setFillAfter(true);
viewHolder.layoutToAnimate.setAnimation(animation);
item.setAnimationDirection(AnimationDirection.SHOWING);
break;
}
viewHolder.remove.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (item.getAnimationDirection() == AnimationDirection.HIDDEN) {
item.setAnimationDirection(AnimationDirection.REVEAL);
notifyDataSetChanged();
}
}
});
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (item.getAnimationDirection() == AnimationDirection.SHOWING) {
item.setAnimationDirection(AnimationDirection.HIDE);
notifyDataSetChanged();
}
}
});
return convertView;
}
Moje pytanie brzmi::
Jak mogę utrzymać ten stan View
offsetu dla każdego ListView
sprzęcie?
gdzie należy przechowywać przesunięcie widoku? zaraz po uruchomieniu animacji? – user1940676
Ilekroć zmienia się dla określonej pozycji. Możesz użyć 'AnimatorUpdateListener'. – nhaarman
i jak mogę przywrócić przesunięcie? kiedy wywołuję setX() wewnątrz adaptera, wydaje się, że nie działa, mam na myśli, czy jest sposób na osiągnięcie tego w adapterze bez użycia niestandardowej implementacji listview? – user1940676