8

ファイルからイメージをロードするために、この構成で UIL を使用しています。

BitmapDisplayer displayer = new FadeInBitmapDisplayer(500) {

        @Override
        public Bitmap display(Bitmap bitmap, ImageView imageView,
                LoadedFrom loadedFrom) {
            if (loadedFrom != LoadedFrom.MEMORY_CACHE) {
                return super.display(bitmap, imageView, loadedFrom);
            } else {
                imageView.setImageBitmap(bitmap);
                return bitmap;
            }
        }

    };
    DisplayImageOptions options = new DisplayImageOptions.Builder()
            .cacheInMemory(true).resetViewBeforeLoading(true)
            .showImageForEmptyUri(R.drawable.thumbnail_no_image)
            .showImageOnFail(R.drawable.thumbnail_no_image)
            .displayer(displayer).build();
    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
            context).defaultDisplayImageOptions(options)
            .memoryCacheSize(2 * 1024 * 1024).build();
    sLoader.init(config);

選択を実装する必要があるため、選択GridViewされた項目を検討した後notifyDataSetChanged、selectionOverlay を表示するために呼び出します。そして、この呼び出しの後、すべての画像がリロードを開始し、これによりGridView点滅が発生します。どうすればこれを回避できますか?

4

2 に答える 2

3

この状況でnotifyDataSetChangedを呼び出す必要はないと思います。

アダプターでnotifyDataSetChangedを呼び出すと、データが変更されたことを ListView / GridView に通知し、自分自身を更新する必要があります。したがって、このメソッドを呼び出すと、それ自体がリロードされ、アダプターのgetView()が呼び出されます。これが、UIL が画像の読み込みを開始する理由です。これは getView() で記述されているためです (実際には行の再読み込みのすべてのビュー)。

行ビューとそのデータにアクセスするには、GridView のsetOnItemClickListenerを使用できます。このメソッドで十分なパラメーターを取得するため、それに応じて操作できます。

これが役立つことを願っています。ありがとう

于 2015-04-08T10:53:28.077 に答える
0

これはあなたの要件に役立つかもしれません。 https://github.com/koush/UrlImageViewHelper

次のコードを使用して、URL からの画像を表示します。

UrlImageViewHelper.setUrlDrawable(holder.imageView2, url,
                    R.drawable.default, new UrlImageViewCallback() {
                        @Override
                        public void onLoaded(ImageView imageView,
                                Bitmap b, String url,
                                boolean loadedFromCache) {
                            // only show the animation
                            // if it was loaded from
                            // network or disk...
                            if (!loadedFromCache) {


                                if (b != null)
                                    holder.imageView2.setImageBitmap(b);

                                // ScaleAnimation scale = new ScaleAnimation(0,
                                // 1,
                                // 0, 1, ScaleAnimation.RELATIVE_TO_SELF,
                                // .5f, ScaleAnimation.RELATIVE_TO_SELF,
                                // .5f);
                                // scale.setDuration(1000);
                                // imageView.startAnimation(scale);
                            } else {

                                if (b != null)
                                    holder.imageView2.setImageBitmap(b);
                            }
                        }
                    });
于 2015-02-09T10:53:24.070 に答える