1

画像のGridViewがあります。画像はダウンロード時に表示されますが、画像にビットマップが入力されるときにフェードイン効果を持たせたいと思いました。これを行うためのコードを追加しましたが、アニメーションは、その時点でロードされている画像だけでなく、すべての画像に適用されます。これは、次のビットマップが設定されてアニメーションが再開されると、すべての画像がわずかにフェードインして消えることを意味します。

アニメーションをその時点でロードされている画像にのみ適用するにはどうすればよいですか?

フェードインXML:

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:interpolator="@android:anim/accelerate_interpolator" 
android:duration="2500" android:repeatCount="0"/>
</set>

そして、ImageAdapterに画像をロードするためのコードは次のとおりです。

 public View getView(int position, View convertView, ViewGroup parent) {
        try {

            BorderedImageView imageView;
            imageView = new BorderedImageView(mContext, mPhotoId, position);
            Animation myFadeInAnimation =    AnimationUtils.loadAnimation(this.mContext , R.anim.fadein);

            if (convertView == null) {  // if it's not recycled, initialize some attributes
                imageView.setLayoutParams(new GridView.LayoutParams(mSize, mSize));
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imageView.setPadding(3,3,3,3);
            } else {
                imageView = (BorderedImageView) convertView;
            }

            Bitmap b = photoCollection.GetThumbnail(position);
            imageView.startAnimation(myFadeInAnimation);
            imageView.setImageBitmap(b);
            return imageView;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }

編集OK実際にこれが発生する理由は明らかです-サムネイルがダウンロードされるたびにnotifydatasetchanged()を呼び出しているので、ダウンロードするたびにすべての画像に対して上記のコードが実行されます。それでも修正方法がわかりません!

4

1 に答える 1

0

OK、これを修正しました。

アニメーションを自分のImageViewクラスに移動し、アニメーションを開始するメソッドを追加しました。これは、サムネイルのダウンロードが完了したときに設定された写真のコレクションのフラグによってトリガーされます。

于 2012-05-15T08:16:07.907 に答える