解決Android imageView預(yù)覽發(fā)生旋轉(zhuǎn)問題

網(wǎng)上很多解決這個問題的方法基本上都是:
一、獲取圖片信息,得到旋轉(zhuǎn)的角度;
二、通過Matrix進(jìn)行旋轉(zhuǎn)修正,返回一個Bitmap對象;
我覺得這個挺麻煩的,這里我給出我的方法:
我使用的圖片加載框架是[Android-Universal-Image-Loader,在給imageView加載圖片時,通常會調(diào)用如下的方法:
public static void setImageSrc(String src, ImageView imageViews, DisplayImageOptions options) {
// 如果沒有圖片,設(shè)置圖片為空
if (null != src) {
ImageLoader.getInstance().displayImage(src, imageViews, options);
} else {
imageViews.setVisibility(View.GONE);
}
}
特殊情況下需要調(diào)用:
ImageLoader.getInstance().displayImage(String uri, ImageView imageView, DisplayImageOptions options,ImageLoadingListener listener)這個方法,尤其是在預(yù)覽圖片的時候需要使用這個方法進(jìn)行圖片加載的監(jiān)聽以及在加載圖片時對progressBar的顯示和隱藏的監(jiān)聽操作。
關(guān)鍵點在于:這兩個方法都需要傳入一個DisplayImageOptions 對象,該對象一般在初始化Android-Universal-Image-Loader框架的時候都應(yīng)該被初始化的,這里我關(guān)鍵代碼處理方式如下:
public static void initImageLoaderConfig(Context context) {
File cacheDir = StorageUtils.getOwnCacheDirectory(context, "image_loader/zy_cache");
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPoolSize(10)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions
.threadPriority(Thread.NORM_PRIORITY - 1) // default
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.memoryCacheSizePercentage(13) // default
.diskCache(new UnlimitedDiskCache(cacheDir)) // default
.diskCacheSize(50 * 1024 * 1024)
.diskCacheFileCount(100)
.diskCacheFileNameGenerator(new Md5FileNameGenerator()) // default
.imageDownloader(new BaseImageDownloader(context)) // default
.imageDecoder(new BaseImageDecoder(true)) // default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.build();
ImageLoader.getInstance().init(config);
getBuilder();
}

public static DisplayImageOptions.Builder getBuilder(){
      builder = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .cacheOnDisk(true)
            //是否考慮JPEG圖像EXIF參數(shù)(旋轉(zhuǎn),翻轉(zhuǎn))default is false
            .considerExifParams(true)
            .imageScaleType(ImageScaleType.EXACTLY)//圖像將完全按比例縮小的目標(biāo)大小
            .bitmapConfig(Bitmap.Config.RGB_565);
    return builder;
}

public static DisplayImageOptions getDisplayImageOptions(int onLoadingResourceId, int emptyResourceId, int failResourceId) {
    DisplayImageOptions options = builder
            .showImageOnLoading(onLoadingResourceId)
            .showImageForEmptyUri(emptyResourceId)
            .showImageOnFail(failResourceId)
            .build();
    return options;
}

其中,最關(guān)鍵的是getBuilder()方法中.considerExifParams(true)設(shè)置為true,這表示考慮JPEG圖像EXIF參數(shù)(旋轉(zhuǎn),翻轉(zhuǎn)),就這一句話,解決了圖片信息中有反轉(zhuǎn)和旋轉(zhuǎn)信息的圖片預(yù)覽問題,最終的結(jié)果就是保證圖片都是正著顯示。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容