1

こんにちは、ArrayAdapter のアニメーションを使用していました。サムネールがロードされたときにアニメーションを表示したい... しかし、リストのサムネールがロードされるたびに、配列アダプタのすべての項目に対してアニメーションが開始されます。その結果、各サムネイルのアニメーションが 5 回開始されます。アイテムがロードされたときにアニメーションが開始されないようにするにはどうすればよいですか?

public View getView(int position, View item, ViewGroup parent){

        ViewHolder holder;
        Video video = mVideoList.get(position);

        if(item == null)
        {
            item = mInflater.inflate(R.layout.adapter_recommended_videos, null);

            holder = new ViewHolder();
            holder.title = (TextView)item.findViewById(R.id.adapter_recommended_videos_textview);
            holder.thumb = (ImageView)item.findViewById(R.id.adapter_recommended_videos_imageview);

            holder.title.setTypeface(
                    Typeface.createFromAsset(mContext.getAssets(), "roboto_medium.ttf"));

            item.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) item.getTag();

        }

        holder.title.setText(video.getTitle());
        ImageView iv = holder.thumb;
        if (video.getThumb() != null) {
            if(!mAnimationFlags.get(position)){
                iv.startAnimation(mAnimation);
                mAnimationFlags.set(position, true);
            }
            holder.thumb.setImageBitmap(video.getThumb());
        } else {
            holder.thumb.setImageResource(R.drawable.dummy_video_thumbnail);
        }


        return(item);
    }


    static class ViewHolder {
        TextView title;
        ImageView thumb;
    }
4

1 に答える 1

1

「getView()」を呼び出すたびに新しいアニメーションをインスタンス化するだけで済みました。適切なコードは次のとおりです。

public View getView(int position, View item, ViewGroup parent){

        ViewHolder holder;
        Video video = mVideoList.get(position);

        if(item == null)
        {
            item = mInflater.inflate(R.layout.adapter_recommended_videos, null);

            holder = new ViewHolder();
            holder.title = (TextView)item.findViewById(R.id.adapter_recommended_videos_textview);
            holder.thumb = (ImageView)item.findViewById(R.id.adapter_recommended_videos_imageview);

            holder.title.setTypeface(
                    Typeface.createFromAsset(mContext.getAssets(), "roboto_medium.ttf"));

            item.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) item.getTag();

        }

        holder.title.setText(video.getTitle());
        ImageView iv = holder.thumb;
        if (video.getThumb() != null) {
            if(!mAnimationFlags.get(position)){
                Animation anim = AnimationUtils.loadAnimation(mContext, android.R.anim.fade_in);
                iv.startAnimation(anim);
                mAnimationFlags.set(position, true);
            }
            holder.thumb.setImageBitmap(video.getThumb());
        } else {
            holder.thumb.setImageResource(R.drawable.dummy_video_thumbnail);
        }


        return(item);
    }
于 2013-05-10T14:01:07.840 に答える