「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);