안녕하세요 위 코드를 사용하여 위젯 목록보기 항목에 이미지를로드했습니다. 유니버설 이미지 로더에서 SimpleImageLoadingListener를 사용하여 비트 맵 캐시를 사용하는 방법 android
Map<Integer, Boolean> flags = Collections.synchronizedMap(new HashMap<Integer, Boolean>());
Bitmap mBitmap;
Handler handler = new Handler(Looper.getMainLooper());
flags.put(position, false);
handler.post(new Runnable() {
@Override
public void run() {
ImageLoader imageLoader = ImageLoader.getInstance();
DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisc(true).resetViewBeforeLoading(true)
.build();
imageLoader.loadImage(item.mTooteet.getThumbUrl1() + "&userToken=" + userPreference.getUserToken(), options,
new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
Log.d(TAG,"onLoadingStarted "+position);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
Log.d(TAG,"onLoadingFailed "+position);
flags.put(position, true);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
Log.d(TAG,"onLoadingCancelled "+position);
flags.put(position, true);
}
@Override
public void onLoadingComplete(String arg0, View arg1, Bitmap bitmap) {
Log.d(TAG,"onLoadingComplete "+position);
mBitmap = bitmap;
flags.put(position, true);
}
});
}
});
while (!flags.get(position)) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
flags.put(position, false);
if (mBitmap != null) {
Log.d(TAG,"onLoadingComplete mBitmap not null "+position);
remoteView.setImageViewBitmap(R.id.feed_image, mBitmap);
} else {
Log.d(TAG,"onLoadingComplete mBitmap null "+position);
remoteView.setImageViewResource(R.id.feed_image, R.drawable.app_icon);
}
mBitmap = null;
그리고 내가 아래의 코드를 사용하고 내 응용 프로그램 파일에
,// UNIVERSAL IMAGE LOADER SETUP
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheOnDisc(true).cacheInMemory(true)
.imageScaleType(ImageScaleType.EXACTLY)
.displayer(new FadeInBitmapDisplayer(300)).build();
ImageLoaderConfiguration uilConfig = new ImageLoaderConfiguration.Builder(
getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.memoryCache(new WeakMemoryCache())
.discCacheSize(100 * 1024 * 1024).build();
ImageLoader.getInstance().init(uilConfig);
// END - UNIVERSAL IMAGE LOADER SETUP
하지만이 코드는 URL 매번에서 이미지를 다운로드합니다. 내 앱 위젯 목록보기를 스크롤 할 때마다 다시로드하고 싶지 않습니다. 처음 다운로드 한 후에는 캐시에 보관해야합니다. 이 일을 할 생각을 나에게 제안 해 주시겠습니까?
귀하의 질문에 대한 해결책은 아니지만 [glide] (https://github.com/bumptech/glide)를 사용할 수없는 이유에 대한 제안입니다. 내 경우에 더 좋습니다. 나는 또한 희망을 품는다? – Raghavendra
@Raghavendra 안녕하세요, 위와 같이 이미지보기에서 이미지를 설정할 수있는 widget을 사용하고 있습니다.이 remoteView.setImageViewBitmap (R.id.feed_image, mBitmap); 여기서 R.id.feed_image는 내 이미지보기 ID입니다. 위젯에서 글라이드 라이브러리를 사용하는 데 문제가 있습니다. 이런 위젯에서 글라이드를 사용하는 법을 아십니까? – Sangeetha