www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > > 充電吧
[導讀]在泰國舉行的谷歌開發(fā)者論壇上,谷歌為我們介紹了一個名叫?Glide?的圖片加載庫,作者是bumptech。這個庫被廣泛的運用在google的開源項目中,包括2014年google I/O大會上發(fā)布的


在泰國舉行的谷歌開發(fā)者論壇上,谷歌為我們介紹了一個名叫?Glide?的圖片加載庫,作者是bumptech。這個庫被廣泛的運用在google的開源項目中,包括2014年google I/O大會上發(fā)布的官方app。

它的成功讓我非常感興趣。我花了一整晚的時間把玩,決定分享一些自己的經(jīng)驗。在開始之前我想說,Glide和Picasso有90%的相似度,準確的說,就是Picasso的克隆版本。但是在細節(jié)上還是有不少區(qū)別的。

導入

Picasso和Glide都在jcenter上。在項目中添加依賴非常簡單:

Picasso

dependencies?{??
????compile?'com.squareup.picasso:picasso:2.5.1'??
}

Glide

????dependencies?{??
????????compile?'com.github.bumptech.glide:glide:3.5.2'??
????????compile?'com.android.support:support-v4:22.0.0'??
????}

當然現(xiàn)在v4包已經(jīng)是android項目標配了

Glide的with方法不光接受Context,還接受Activity 和 Fragment,Context會自動的從他們獲取。

1.網(wǎng)絡加載圖片到ImageView中

Glide.with(context).load(imageUrl).into(imageView);

2.當加載網(wǎng)絡圖片時,由于加載過程中圖片未能及時顯示,此時可能需要設置等待時的圖片,通過placeHolder()方法

Glide.with(context).load(imageUrl).placeholder(R.mipmap.ic_launcher).into(imageView);

3.當加載圖片失敗時,通過error(Drawable drawable)方法設置加載失敗后的圖片顯示:

Glide.with(context).load(imageUrl).error(R.mipmap.ic_launcher).into(imageView);

4.圖片的縮放,centerCrop()和fitCenter():
1)使用centerCrop是利用圖片圖填充ImageView設置的大小,如果ImageView的Height是match_parent則圖片就會被拉伸填充

Glide.with(context).load(imageUrl).centerCrop().into(imageView);

2)使用fitCenter即縮放圖像讓圖像都測量出來等于或小于 ImageView 的邊界范圍,該圖像將會完全顯示,但可能不會填滿整個ImageView。

Glide.with(context).load(imageUrl).fitCenter().into(imageView);

5.顯示gif動畫,asGif()判斷是否是gif動畫

Glide.with(context).load(imageUrl).asGif().into(imageView);

6.顯示本地視頻

String?filePath?=?"/storage/emulated/0/Pictures/example_video.mp4";
Glide.with(?context?).load(?Uri.fromFile(?new?File(?filePath?)?)?).into(imageViewGifAsBitmap?);

7.緩存策略

Glide.with(?context?).load(imageUrl).skipMemoryCache(true).into(imageViewInternet?);//跳過內(nèi)存緩存
Glide.with(?context?).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.NONE).into(?imageViewInternet?);//跳過硬盤緩存

DiskCacheStrategy.NONE?什么都不緩存DiskCacheStrategy.SOURCE?僅僅只緩存原來的全分辨率的圖像DiskCacheStrategy.RESULT?僅僅緩存最終的圖像,即降低分辨率后的(或者是轉換后的)DiskCacheStrategy.ALL?緩存所有版本的圖像(默認行為)

8.優(yōu)先級,設置圖片加載的順序:

?

Glide.with(context).load(imageUrl).priority(?Priority.HIGH).into(?imageView);

9.獲取Bitmap,設置CircleImageVIew可以使用這個ImageView庫


Glide.with(mContext)
????.load(url)?
????.placeholder(R.drawable.loading_spinner)
????.into(new?SimpleTarget(width,?height)?{
????????@Override?
????????public?void?onResourceReady(Bitmap?bitmap,?GlideAnimation?anim)?{
????????????//?setImageBitmap(bitmap)?on?CircleImageView?
????????}?
????};


10.加載圓形圖片和圓角圖片


//圓形圖片
public?class?GlideCircleTransform?extends?BitmapTransformation?{
????public?GlideCircleTransform(Context?context)?{
????????super(context);
????}

????@Override?protected?Bitmap?transform(BitmapPool?pool,?Bitmap?toTransform,?int?outWidth,?int?outHeight)?{
????????return?circleCrop(pool,?toTransform);
????}

????private?static?Bitmap?circleCrop(BitmapPool?pool,?Bitmap?source)?{
????????if?(source?==?null)?return?null;

????????int?size?=?Math.min(source.getWidth(),?source.getHeight());
????????int?x?=?(source.getWidth()?-?size)?/?2;
????????int?y?=?(source.getHeight()?-?size)?/?2;

????????//?TODO?this?could?be?acquired?from?the?pool?too
????????Bitmap?squared?=?Bitmap.createBitmap(source,?x,?y,?size,?size);

????????Bitmap?result?=?pool.get(size,?size,?Bitmap.Config.ARGB_8888);
????????if?(result?==?null)?{
????????????result?=?Bitmap.createBitmap(size,?size,?Bitmap.Config.ARGB_8888);
????????}

????????Canvas?canvas?=?new?Canvas(result);
????????Paint?paint?=?new?Paint();
????????paint.setShader(new?BitmapShader(squared,?BitmapShader.TileMode.CLAMP,?BitmapShader.TileMode.CLAMP));
????????paint.setAntiAlias(true);
????????float?r?=?size?/?2f;
????????canvas.drawCircle(r,?r,?r,?paint);
????????return?result;
????}

????@Override?public?String?getId()?{
????????return?getClass().getName();
????}
}

????Contact?GitHub?API?Training?Shop?Blog?About

?


//圓角圖片
public?class?GlideRoundTransform?extends?BitmapTransformation?{

????private?static?float?radius?=?0f;

????public?GlideRoundTransform(Context?context)?{
????????this(context,?4);
????}

????public?GlideRoundTransform(Context?context,?int?dp)?{
????????super(context);
????????this.radius?=?Resources.getSystem().getDisplayMetrics().density?*?dp;
????}

????@Override?protected?Bitmap?transform(BitmapPool?pool,?Bitmap?toTransform,?int?outWidth,?int?outHeight)?{
????????return?roundCrop(pool,?toTransform);
????}

????private?static?Bitmap?roundCrop(BitmapPool?pool,?Bitmap?source)?{
????????if?(source?==?null)?return?null;

????????Bitmap?result?=?pool.get(source.getWidth(),?source.getHeight(),?Bitmap.Config.ARGB_8888);
????????if?(result?==?null)?{
????????????result?=?Bitmap.createBitmap(source.getWidth(),?source.getHeight(),?Bitmap.Config.ARGB_8888);
????????}

????????Canvas?canvas?=?new?Canvas(result);
????????Paint?paint?=?new?Paint();
????????paint.setShader(new?BitmapShader(source,?BitmapShader.TileMode.CLAMP,?BitmapShader.TileMode.CLAMP));
????????paint.setAntiAlias(true);
????????RectF?rectF?=?new?RectF(0f,?0f,?source.getWidth(),?source.getHeight());
????????canvas.drawRoundRect(rectF,?radius,?radius,?paint);
????????return?result;
????}

????@Override?public?String?getId()?{
????????return?getClass().getName()?+?Math.round(radius);
????}
}

?

Glide.with(this).load("http://img.21ic.com/21ic_pic/CSDN/bdlogo.png").transform(new?GlideRoundTransform(context)).into(imageView);
Glide.with(this).load("http://img.21ic.com/21ic_pic/CSDN/bdlogo.png").transform(new?GlideRoundTransform(context,?10)).into(imageView);
Glide.with(this).load("http://img.21ic.com/21ic_pic/CSDN/bdlogo.png").transform(new?GlideCircleTransform(context)).into(imageView);


?

添加圖片淡入加載的效果



Glide.with(context)
????.load(url)
????.placeholder(R.drawable.loading)
????.error(R.drawable.failed)?
????.crossFade(1000)?//?可設置時長,默認“300ms”
????.into(view);



獲得圖片緩存路徑

private?String?getImagePath(String?imgUrl)?{????
??????String?path?=?null;????
??????FutureTargetfuture?=?Glide.with(ViewBigImageActivity.this)
?????????????.load(imgUrl)
?????????????.downloadOnly(500,?500);????
?????try?{????????
????????????File?cacheFile?=?future.get();????????
????????????path?=?cacheFile.getAbsolutePath();????
?????}?catch?(InterruptedException?|?ExecutionException?e)?{?
????????????e.printStackTrace();????
?????}????
?????return?path;
}



注意:應在子線程中執(zhí)行。


使用:

new?Thread(new?Runnable()?{
????@Override
????public?void?run()?{
????????//?子線程獲得圖片路徑
????????final?String?imagePath?=?getImagePath(imageUrl);
????????//?主線程更新
????????MainActivity.this.runOnUiThread(new?Runnable()?{
????????????@Override
????????????public?void?run()?{
????????????????//?操作代碼
????????????}
????????});
????}
}).start();


一些使用技巧

1.Glide.with(context).resumeRequests()和 Glide.with(context).pauseRequests()

當列表在滑動的時候,調(diào)用pauseRequests()取消請求,滑動停止時,調(diào)用resumeRequests()恢復請求。這樣是不是會好些呢?

2.Glide.clear()

當你想清除掉所有的圖片加載請求時,這個方法可以幫助到你。

3.ListPreloader

如果你想讓列表預加載的話,不妨試一下ListPreloader這個類。

一些基于Glide的優(yōu)秀庫

1.glide-transformations

一個基于Glide的transformation庫,擁有裁剪,著色,模糊,濾鏡等多種轉換效果,贊的不行不行的~~

2.GlidePalette

一個可以在Glide加載時很方便使用Palette的庫。


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉