再び「奇妙な」問題に直面しています。
Viewpagerを使用して2つの個別の画像を表示しています(Viewpagerにはレイアウトと2つの画像ビューのみが含まれています)。コンセプトは、ローカルファイルキャッシュから低解像度の画像を(すぐに)表示し、その間に高解像度の画像をロードして表示することです。
問題は、低解像度の写真のみを使用すると、写真はすぐに表示され、すべてが完璧ですが、高解像度の写真が有効になるとすぐに(表示されるようになります)、ユーザーが非常に速くスワイプすると、画面が「短時間」黒いままになります" (500 ミリ秒から 1.5 秒) および低解像度の画像は表示されません。高解像度の写真だけ..
たぶん、誰もが同様の問題に直面しました。
ViewPager コード:
/**
* Create and add a new page of the image at the given position.
*
* @param collection
* @param position
*/
@Override
public Object instantiateItem (View collection, final int position) {
Log.v(TAG, "instantiateItem: pos: " +position);
final Context context = collection.getContext();
RelativeLayout layout = new RelativeLayout(context);
ImageViewTouch imageView = new ImageViewTouch(context);
ImageViewTouch imageView2 = new ImageViewTouch(context);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
layout.addView(imageView, lp);
layout.addView(imageView2, lp);
imageView.setOnSingleTapConfirmedListener((OnImageViewSingleTapConfirmedListener) context);
imageView2.setOnSingleTapConfirmedListener((OnImageViewSingleTapConfirmedListener) context);
imageView2.setVisibility(View.GONE);
if (position == restorePageNumber) {
loadBitmap(context, position, imageView, imageView2, restoreZoomLevel);
Log.w(TAG, "zoom level regocnized for pos: " + position + " resetting...");
restorePageNumber = Constants.INVALID_INT;
restoreZoomLevel = Constants.INVALID_LONG;
} else {
loadBitmap(context, position, imageView, imageView2, Constants.INVALID_LONG);
}
imageView.setFitToScreen(true);
imageView2.setFitToScreen(true);
activePages.put(position, imageView2);
((ViewPager) collection).addView(layout);
return layout;
}
protected void loadBitmap (Context context, int position, ImageViewTouch imageView, ImageViewTouch imageView2, float restoreZoomLevel) { Photo photo = getPhotoAtPosition(position); Log.v(TAG, "loading photo. pos: " + position + " id: " + photo.getId()); // show small image first if (!(photo instanceof CameraPhoto)) { StorageManager.retrieveBitmapBackgroundWithImageview(context, photo, Photo.SIZE_SMALL, imageView, true, Constants.INVALID_LONG); } // afterwards replace with big image StorageManager.retrieveBitmapBackgroundWithImageview(context, photo, Photo.SIZE_LARGE, imageView2, true, restoreZoomLevel); }
これらのメソッド (retrieveBitmapBackgroundWithImageview) では、画像は Background に読み込まれ、その後 imageview に設定されます。
大きなビットマップの設定に問題があるようです。大きなビットマップを含む Imageview が非表示 (View.GONE) のままで、ローカル キャッシュ イメージのみが表示されている場合でも、ViewPager はページの読み込み時に一定の「時間」(上記のように 500 ミリ秒から 1.5 秒) の間、黒のままです。 )
どうも :)