Android GetView中的AnimationDrawable
我开发了ListView,它有一个TextView和两个ImageView。我已经为每个ImageView设置了AnimationDrawable。我的问题是,当我向下滚动然后向上滚动时,动画会再次开始。我已经设置了5个图像的框架。例如,如果ImageView显示第三幅图像,我将向下滚动,然后再向上滚动。现在ImageView显示第一个图像,这意味着动画再次开始。我想保持动画后滚动也Android GetView中的AnimationDrawable,android,android-listview,android-animation,Android,Android Listview,Android Animation,我开发了ListView,它有一个TextView和两个ImageView。我已经为每个ImageView设置了AnimationDrawable。我的问题是,当我向下滚动然后向上滚动时,动画会再次开始。我已经设置了5个图像的框架。例如,如果ImageView显示第三幅图像,我将向下滚动,然后再向上滚动。现在ImageView显示第一个图像,这意味着动画再次开始。我想保持动画后滚动也 @Override public View getView(final int position, View c
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View vi = convertView;
ViewHolder holder;
if (vi == null) {
vi = adapterInflater.inflate(R.layout.categoryadapter, null);
holder = new ViewHolder();
holder.lPic = (ImageView) vi.findViewById(R.id.imageView1);
holder.rPic = (ImageView) vi.findViewById(R.id.imageView2);
holder.category = (TextView) vi.findViewById(R.id.textView_category);
vi.setTag(holder);
}
else
{
holder = (ViewHolder) vi.getTag();
}
fontStyle = Typeface.createFromAsset(adapterActivity.getAssets(),
"fonts/Helvetica.TTF");
final Categary assingValue = list.get(position);
holder.category.setTypeface(fontStyle);
holder.category.setText(assingValue.desc);
leftImage=assingValue.leftPicture;
rightImage=assingValue.rightPicture;
AnimationDrawable animation = new AnimationDrawable();
for (String image : leftImage) {
ImageLoader obj=new ImageLoader(adapterActivity);
holder.lPic.setTag(image);
Bitmap b=obj.getBitmap(image, holder.lPic);
Drawable d = new BitmapDrawable(adapterActivity.getResources(),b);
animation.addFrame(d, 15 * 1000);
}
holder.lPic.setImageDrawable(animation);
animation.setOneShot(false);
AnimationDrawable animation1 = new AnimationDrawable();
for (String image : rightImage) {
ImageLoader obj=new ImageLoader(adapterActivity);
holder.rPic.setTag(image);
Bitmap b=obj.getBitmap(image, holder.rPic);
Drawable d = new BitmapDrawable(adapterActivity.getResources(),b);
animation1.addFrame(d, 15 * 1000);
}
holder.rPic.setImageDrawable(animation1);
animation1.setOneShot(false);
animation.start();
animation1.start();
return vi;
}
请尝试以下操作:
在适配器的构造函数中创建所有视图并存储在列表中,然后在get view中返回该视图
例如:
@Override
public View createView(final int position) {
View vi = null;
ViewHolder holder;
vi = adapterInflater.inflate(R.layout.categoryadapter, null);
holder = new ViewHolder();
holder.lPic = (ImageView) vi.findViewById(R.id.imageView1);
holder.rPic = (ImageView) vi.findViewById(R.id.imageView2);
holder.category = (TextView) vi.findViewById(R.id.textView_category);
fontStyle = Typeface.createFromAsset(adapterActivity.getAssets(),
"fonts/Helvetica.TTF");
final Categary assingValue = list.get(position);
holder.category.setTypeface(fontStyle);
holder.category.setText(assingValue.desc);
leftImage=assingValue.leftPicture;
rightImage=assingValue.rightPicture;
AnimationDrawable animation = new AnimationDrawable();
for (String image : leftImage) {
ImageLoader obj=new ImageLoader(adapterActivity);
holder.lPic.setTag(image);
Bitmap b=obj.getBitmap(image, holder.lPic);
Drawable d = new BitmapDrawable(adapterActivity.getResources(),b);
animation.addFrame(d, 15 * 1000);
}
holder.lPic.setImageDrawable(animation);
animation.setOneShot(false);
AnimationDrawable animation1 = new AnimationDrawable();
for (String image : rightImage) {
ImageLoader obj=new ImageLoader(adapterActivity);
holder.rPic.setTag(image);
Bitmap b=obj.getBitmap(image, holder.rPic);
Drawable d = new BitmapDrawable(adapterActivity.getResources(),b);
animation1.addFrame(d, 15 * 1000);
}
holder.rPic.setImageDrawable(animation1);
animation1.setOneShot(false);
animation.start();
animation1.start();
return vi;
}
为每个项目调用上述函数,并将返回的视图存储在视图列表中:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
return views.get(position);
}
我还没有试过,但这可能有用
告诉我会发生什么。谢谢你的回答,兄弟。我是通过使用动态表行来实现的