我想在listitem按钮上显示动画。动画效果很好。我没有点击的其他一些按钮也显示了动画。我发现问题在于适配器中的回收视图。任何人都可以帮助我处理这种情况..这是我写的代码:适配器内部的getview方法:
viewHolder.getrate.setOnClickListener(
new CompoundButton.OnClickListener() {
public void onClick(View paramView) {
ListData rateobj = (ListData) viewHolder.getrate.getTag();
paramView.setBackgroundResource(R.drawable.spin_animation);
// Get the background, which has been compiled to an AnimationDrawable object.
frameAnimation = (AnimationDrawable) paramView.getBackground();
// Start the animation (looped playback by default).
frameAnimation.start();
NetworkRun nt = new NetworkRun(rateobj);
String number=rateobj.getDescription();
String num=number.replaceAll("\\s+","");
nt.execute(num);
viewHolder.load.setEnabled(true);
viewHolder.load.setVisibility(View.VISIBLE);
}
});
答案 0 :(得分:0)
你应该以某种方式删除getView(...)
中的动画,所以每次重复使用视图时它都会重置动画。
我建议以下想法:
public View getView(int position, View convertView, ViewGroup parent) {
// ... inflate convertView, create viewHolder, etc.
convertView.setBackgroundResource(0); // <-- this will remove animation
viewHolder.getrate.setOnClickListener(/* your code here */);
}
唯一的问题是即使对于应该存在的项目,动画也会消失。 在这种情况下,您可以通过存储一组动画项目的位置来修改解决方案。
Set<Integer> animatedPositions = new HashSet<Integer>();
public View getView(final int position, View convertView, ViewGroup parent) {
// ... inflate convertView, create viewHolder, etc.
if(animatedPositions.contains(position)) {
showAnimation(convertView);
} else {
hideAnimation(convertView);
}
viewHolder.getrate.setOnClickListener(
new OnClickListener() {
public void onClick(View paramView) {
animatedPositions.add(position);
showAnimation(paramView);
// your code
}
}
);
}
private void showAnimation(View view) {
view.setBackgroundResource(R.drawable.spin_animation);
AnimationDrawable frameAnimation = (AnimationDrawable) paramView.getBackground();
frameAnimation.start();
}
private void hideAnimation(View view) {
convertView.setBackgroundResource(0);
}
当然,您应该在删除动画时删除集合中的位置(在网络执行后)。