前言
近期公司項(xiàng)目要新加一個(gè)功能,就是點(diǎn)擊圖片放大查看以及能夠下載宫蛆。腦子里一想全谤,之前有個(gè)項(xiàng)目里有第三方圖片查看框架pictureViewer。用起來還挺方便的安皱,二話不說直接開始使用调鬓。結(jié)果由于Glide圖片加載框架難住了我一下午。項(xiàng)目中的Glide與pictureViewer里面的Glide沖突酌伊。歷經(jīng)一番折騰才解決腾窝。
造成原因
![GpictureViewer框架和項(xiàng)目總使用的框架不是同一個(gè)版本的Glide。我在項(xiàng)目中使用的是Glide 4.8.0
而pictureView框架中的是Glide 3.7.0,并且在GitHub里面的更新還是停留在2017年腺晾,估計(jì)已經(jīng)是不維護(hù)了燕锥,不過這個(gè)框架也不是很大,能力好的寫一個(gè)也不是太難悯蝉,但是我們程序員要喜歡偷懶hhhhh归形。
解決辦法
關(guān)于解決辦法我也是費(fèi)了挺長(zhǎng)時(shí)間,試過換一個(gè)框架鼻由,但是換了之后好像還是一樣暇榴。也試過在依賴?yán)锩娼鉀Q沖突
implementation ('com.github.SuperKotlin:PictureViewer:2.0.1'){
exclude group: 'com.github.bumptech.glide'
}
但還是一樣沒有解決這個(gè)問題。沒辦法蕉世,只能使用最后一種辦法了蔼紧。將GitHub上的項(xiàng)目下載下來并且加入到自己項(xiàng)目里,再修改里面的Glide版本狠轻。那么奸例,要怎么做呢?
第一步:將pictureViewer導(dǎo)入項(xiàng)目
首先將GitHub下載到電腦上、地址:PictureViewer GitHub 地址
然后解壓查吊、解壓之后打開項(xiàng)目中的Android Studio > 點(diǎn)擊File > 鼠標(biāo)移到New > 在移到Import Module并且點(diǎn)擊
將你下載并且解壓的pictureViewer地址添加到項(xiàng)目中 > 然后點(diǎn)擊Finish (我已經(jīng)添加了谐区,所以Finish不可點(diǎn)擊)
然后在項(xiàng)目的gradle中的dependencies 加入下面一句,這樣子就完成了導(dǎo)入Module的操作逻卖。
//圖片查看器
implementation project (':PictureViewer')
第二步:修改內(nèi)部代碼
首先將Glide換成項(xiàng)目中使用的相同的版本:
implementation 'com.github.bumptech.glide:glide:4.8.0'
然后你會(huì)發(fā)現(xiàn)框架里面有報(bào)錯(cuò):
原因是當(dāng)你升級(jí)到Glide V4時(shí)宋列,Glide修改以及刪除了一些方法。具體看這篇文章
或者是Glide V4官方文檔
在Glide V4中 .asBitmap()放在了 .with()的后面评也。占位圖和過渡動(dòng)畫等等也進(jìn)行了修改炼杖,并且沒有了SimpleTarget<Bitmap> 這個(gè)方法。那怎么辦呢盗迟?不用著急坤邪,雖然它沒有了SimpleTarget<Bitmap>,但是它還有SimpleTarget<Drawble>這個(gè)方法,我們只需要轉(zhuǎn)換一下就好了罚缕。
修改后(注釋掉的為之前的代碼)
if (!TextUtils.isEmpty(mImageUrl)) {
/*Glide.with(getActivity())
.load(mImageUrl)
.asBitmap()
.placeholder(mImageLoading)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {
mBitmap = bitmap;
mImageView.setImageBitmap(mBitmap);
mAttacher.update();
}
});*/
DrawableCrossFadeFactory drawableCrossFadeFactory = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
Glide.with(getActivity())
.load(mImageUrl)
.apply(new RequestOptions().placeholder(mImageLoading))
.transition(DrawableTransitionOptions.with(drawableCrossFadeFactory))
.into(new SimpleTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
mBitmap=drawableToBitmap(resource);
mImageView.setImageBitmap(mBitmap);
mAttacher.update();
}
});
還有一個(gè)Drawable轉(zhuǎn)換為Bitmap的方法罩扇。
/**
* Drawable轉(zhuǎn)換成一個(gè)Bitmap
*
* @param drawable drawable對(duì)象
* @return
*/
public static final Bitmap drawableToBitmap(Drawable drawable) {
Bitmap bitmap = Bitmap.createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
好了,到了這一步之后怕磨,就大工告成了。接下來就是如何使用了消约。其實(shí)也是非常的簡(jiǎn)單直接給出代碼:我這里呢是只有單張圖片肠鲫,每次呢就只傳一張圖片,我定義的方法只需要傳入context以及圖片家在地址就好了或粮。如果是多張圖片导饲,只需傳入多張圖片地址的List集合就好。具體詳細(xì)使用看這篇文章 一款漂亮的圖片查看器PictrueViewer
Tools.showSinglePic(context,Declare.ServerletImgUrl2 + imgUrlList.getFollow_data().get(0).getImages());
/**
* 查看單張圖片
* @param imgUrl
*/
public static void showSinglePic(Context context,String imgUrl) {
ArrayList<String > imgUrls=new ArrayList<>();
//查看單張氯材,只需要存入一個(gè)圖片值
if (imgUrls.size()==0){
imgUrls.add(imgUrl);
}
PictureConfig config = new PictureConfig.Builder()
.setListData(imgUrls) //圖片數(shù)據(jù)List<String> list
.setPosition(0) //圖片下標(biāo)(從第position張圖片開始瀏覽)
.setDownloadPath("RoadFile") //圖片下載文件夾地址
// .setIsShowNumber(true)//是否顯示數(shù)字下標(biāo)
.needDownload(true) //是否支持圖片下載
.setPlacrHolder(R.mipmap.btn_add) //占位符圖片(圖片加載完成前顯示的資源圖片渣锦,來源drawable或者mipmap)
.build();
ImagePagerActivity.startActivity(context, config);
}
一切準(zhǔn)備就緒了,下面我們來看看結(jié)果:
總結(jié)
雖然修改的地方不多氢哮,可能也不是很嚴(yán)謹(jǐn)?shù)霓k法袋毙,但是自己搞了幾個(gè)小時(shí),自我感覺慢慢摸索的過程挺不錯(cuò)的冗尤,有點(diǎn)輕微的成就感听盖。哈哈!
碼字不易裂七,望收藏點(diǎn)贊皆看!