Android GetView中的AnimationDrawable

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

我开发了ListView,它有一个TextView和两个ImageView。我已经为每个ImageView设置了AnimationDrawable。我的问题是,当我向下滚动然后向上滚动时,动画会再次开始。我已经设置了5个图像的框架。例如,如果ImageView显示第三幅图像,我将向下滚动,然后再向上滚动。现在ImageView显示第一个图像,这意味着动画再次开始。我想保持动画后滚动也

@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);
}
我还没有试过,但这可能有用


告诉我会发生什么。

谢谢你的回答,兄弟。我是通过使用动态表行来实现的