2

「Universal Image Loader」を使用して ListView 内に画像を読み込もうとしています。私のコードは次のようになります。

public View getView(int position, View convertView, ViewGroup parent) 
if (convertView == null) {
        convertView = mInflater.inflate(R.layout.offers_list_adapter, null);

        holder = new ViewHolder();
        holder.mIvImage = (ImageView) convertView
                .findViewById(R.id.ivImage);
        holder.mTxtName = (TextView) convertView.findViewById(R.id.txtName);
        holder.mTxtCategoryName = (TextView) convertView
                .findViewById(R.id.txtCategoryName);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

私には1つのルールがあります:

リスト内のこのアイテムが特別なものである場合、ImageView のパラメーターを変更する必要があります(たとえば、特別なアイテムの imageView は通常より大きくなります)。

したがって、私のコードでは次のようにします。

if (holder.isSpecial) {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, 50);
            layoutParams.gravity = Gravity.CENTER_HORIZONTAL;
            holder.mIvImage.setLayoutParams(layoutParams);
}

パラメータを変更したら、通常どおり「Universal Image Loader」ライブラリを呼び出します。

imageLoader.displayImage(holder.url, holder.mIvImage); 

しかし、ライブラリが UI スレッドで実行されてイメージを ImageView に配置すると、ImageView が中心になく、サイズが正しくありません。このアイテムは特別なので、私が行った変更は適用されません。

私は独自の ImageDownloader を持っており、それを使用すると、ImageView は新しいパラメーター(中心と新しいサイズ) を正しくロードしますが、他の多くの点で、自分のクラスはこのライブラリほど良くありません。

何が起こっているのか誰にも分かりますか?

前もって感謝します、

乾杯!


私の「ユニバーサルイメージローダー」構成:

DisplayImageOptions options = new DisplayImageOptions.Builder()
                .cacheInMemory().cacheOnDisc()
                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
                .displayer(new RoundedBitmapDisplayer(0)).build();


        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
                mContext)
                .memoryCacheExtraOptions(480, 800)
                .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75)
                .threadPoolSize(3)
                .threadPriority(Thread.NORM_PRIORITY - 1)
                .denyCacheImageMultipleSizesInMemory()
                .offOutOfMemoryHandling()
                .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))
                .discCache(new UnlimitedDiscCache(file))
                .discCacheFileNameGenerator(new HashCodeFileNameGenerator())
                .imageDownloader(
                        new URLConnectionImageDownloader(5 * 1000, 20 * 1000))
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
                .enableLogging().defaultDisplayImageOptions(options).build();

        imageLoader.init(config);
4

1 に答える 1

3

GitHub Readme から構成をコピーして貼り付けました。この構成 (GitHub 上) は、すべての可能なオプションを示していますが、それらすべてを呼び出すべきではありません。

サンプル プロジェクト ( UniversalImageLoaderExample ) を調べて、UIL の正しい調整方法と使用方法を確認する必要があります。

于 2012-11-08T12:16:34.107 に答える