整理Glide方法使用含義(毛玻璃效果,實現圓角等)
現在專案中一般使用Glide進行圖片載入,於是找一下他的各個方法的使用,方便使用而已。
新增依賴:
compile 'com.github.bumptech.glide:glide:3.7.0'
基本使用:
Glide
.with(this)
.load(url)
.into(imageView);
強大的Glide.with()
with(Context context). 使用Application上下文,Glide請求將不受Activity/Fragment生命週期控制。最常用(可以解決部分記憶體洩漏問題)
with(Activity activity).使用Activity作為上下文,Glide的請求會受到Activity生命週期控制。
with(FragmentActivity activity).Glide 的請求會受到FragmentActivity生命週期控制。
with(android.app.Fragment fragment).Glide的請求會受到Fragment 生命週期控制。
with(android.support.v4.app.Fragment fragment).Glide的請求會受到Fragment生命週期控制。
強大的.load()
load(Uri uri),
load(File file),
load(Integer resourceId),
load(URL url),
load(byte[] model),
load(T model),
loadFromMediaStore(Uri uri)。
1、load SD卡資源:
load("file://"+Environment.getExternalStorageDirectory().getPath()+"/xxx.jpg")
2、load assets資源:
load("file:///android_asset/xxx.gif")
3、load drawable資源(可以是圖片也可以是gif):
load(R.drawable.xxx)
4、load mipmap資源(可以是圖片也可以是gif):
load(R.mipmap.xxx)
5、load raw資源:
load("android.resource://包名/raw/raw_1" )
或load("android.resource://包名/raw/"+R.raw.raw_1)
或load(R.raw.raw_1)
6、load ContentProvider資源:
load("content://media/external/images/media/139469")
7、load http資源:
load("http://xxxxxxx.jpg")
8、load https資源:
load("https://xxxxxxx.jpg")
常用方法:
1、thumbnail(float sizeMultiplier)
請求給定係數的縮圖。如果縮圖比全尺寸圖先載入完,就顯示縮圖,否則就不顯示。係數sizeMultiplier必須在(0,1)之間,可以遞迴呼叫該方法。
2、sizeMultiplier(float sizeMultiplier)
在載入資源之前給Target大小設定係數。用於裝載縮圖,避免載入大量資源。
3、 diskCacheStrategy(DiskCacheStrategy strategy)
設定快取策略。
DiskCacheStrategy.SOURCE:快取原始資料,
DiskCacheStrategy.RESULT:快取變換(如縮放、裁剪等)後的資源資料,
DiskCacheStrategy.NONE:什麼都不快取,
DiskCacheStrategy.ALL:快取SOURC和RESULT。
預設採用DiskCacheStrategy.RESULT策略,對於download only操作要使用DiskCacheStrategy.SOURCE。
4、priority(Priority priority)
指定載入的優先順序,優先順序越高越優先載入,但不保證所有圖片都按序載入。
列舉 Priority.IMMEDIATE,Priority.HIGH,Priority.NORMAL,Priority.LOW。預設為Priority.NORMAL。
5、 dontAnimate(). 移除所有的動畫。
6、 animate(int animationId)
在非同步載入資源完成時會執行該動畫。
7、 animate(ViewPropertyAnimation.Animator animator).
在非同步載入資源完成時會執行該動畫。
8、 placeholder(int resourceId)
設定資源載入過程中的佔位Drawable。
9、 placeholder(Drawable drawable)
設定資源載入過程中的佔位Drawable。
10、fallback(int resourceId)
設定model為空時要顯示的Drawable。如果沒設定fallback,model為空時將顯示error的Drawable,如果error的Drawable也沒設定,就顯示placeholder的Drawable。
11、 fallback(Drawable drawable)
設定model為空時顯示的Drawable。
12、error(int resourceId)
設定load失敗時顯示的Drawable。
13、error(Drawable drawable)
設定load失敗時顯示的Drawable。
14、listener(RequestListener<? super ModelType, TranscodeType> requestListener)
監聽資源載入的請求狀態,可以使用兩個回撥:
onResourceReady(R resource, T model, Target<R> target, boolean isFromMemoryCache, boolean isFirstResource)
和onException(Exception e, T model, Target<R> target, boolean isFirstResource),
但不要每次請求都使用新的監聽器,要避免不必要的記憶體申請,可以使用單例進行統一的異常監聽和處理。
15、skipMemoryCache(boolean skip)
設定是否跳過記憶體快取,但不保證一定不被快取(比如請求已經在載入資源且沒設定跳過記憶體快取,這個資源就會被快取在記憶體中)。
16、 override(int width, int height)
重新設定Target的寬高值(單位為pixel)。
17、into(Y target)
設定資源將被載入到的Target。
18、into(ImageView view)
設定資源將被載入到的ImageView。取消該ImageView之前所有的載入並釋放資源。
19、into(int width, int height)
後臺執行緒載入時要載入資源的寬高值(單位為pixel)。
20、 preload(int width, int height). 預載入resource到快取中(單位為pixel)。
21、 asBitmap()
無論資源是不是gif動畫,都作為Bitmap對待。如果是gif動畫會停在第一幀。
注意:先load()再asBitmap(),不然報錯!(與Glide4有區別)
22、asGif()
把資源作為GifDrawable對待。如果資源不是gif動畫將會失敗,會回撥.error()。
23、dontTransform()
表示讓Glide在載入圖片的過程中不進行圖片變換,這樣applyCenterCrop()、applyFitCenter()就統統無效了,顯示原圖大小
24、downloadOnly()直接下載
清空快取
禁止記憶體快取:
.skipMemoryCache(true)
清除記憶體快取:
// 必須在UI執行緒中呼叫
Glide.get(context).clearMemory();
禁止磁碟快取:
.diskCacheStrategy(DiskCacheStrategy.NONE)
清除磁碟快取:
// 必須在後臺執行緒中呼叫,建議同時clearMemory()
Glide.get(applicationContext).clearDiskCache();
直接獲得Bitmap
有些時候我們並不希望把圖片放入ImageView中。我們只要 Bitmap 本身。Glide 提供了一個用 Targets 的簡單的方式去接受圖片資源的 Bitmap。Targets 是回撥函式,它在 Glide 做完所有的載入和處理之後返回結果。
方法1
Glide.with(this).load(url).asBitmap().into(newSimpleTarget<Bitmap>() {
@Override
public voidonResourceReady(Bitmap resource, GlideAnimation<? super Bitmap>glideAnimation) {
//resource即是獲得的Bitmap
}
});
方法2
Bitmap bitmap =Glide.with(MainActivity.this).load(url).asBitmap().into(500, 500).get();
該方式只能在子執行緒中獲得
下載圖片到本地
- 使用downloadOnly下載
new Thread(new Runnable() {
@Override
public void run() {
FutureTarget<File> fileFutureTarget = Glide.with(UIUtils.getContext())
.load(url)
.downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
try {
final File file = fileFutureTarget.get();
runOnUiThread(new Runnable() {
@Override
public void run() {
mPath.setText(file.getPath());
}
});
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}).start();
get()方法會造成執行緒阻塞,要放在子執行緒
- 獲得bitmap物件
new Thread(new Runnable() {
private Bitmap bitmap;
@Override
public void run() {
try {
bitmap = Glide.with(UIUtils.getContext())
.load(url)
.asBitmap()
.into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.get();
runOnUiThread(new Runnable() {
@Override
public void run() {
mIv.setImageBitmap(bitmap);
}
});
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}).start();
載入圖片到Notification中
NotificationTarget notificationTarget =
new NotificationTarget(
Context,
RemoteViews,
viewid,
notificationObject,
notifyId);
Glide.with(this).load(url).asBitmap().into(notificationTarget);
Glide自帶的一個漸變動畫
Glide.with(this).load(url).crossFade([duration]).into(iv);
載入Gif
//普通顯示GIF
Glide.with( context ).load( gifUrl ).into( iv );
//新增GIF檢查,如果不是GIF就會顯示載入失敗點陣圖
Glide.with( context ).load( gifUrl ).asGif().into( iv);
顯示本地視訊
String filePath ="/storage/emulated/0/Pictures/xxx.mp4";
Glide
.with(context )
.load(Uri.fromFile( new File( filePath ) ) )
.into( iv );
Glid只能載入本地視訊,不能從網路中獲取
顯示圓形圖片
Glide.with(this).load(R.raw.icon_added)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.thumbnail(0.1f)
.centerCrop()
.into(new BitmapImageViewTarget(mIv) {
@Override
protected void setResource(Bitmap resource) {
RoundedBitmapDrawable circularBitmapDrawable =
RoundedBitmapDrawableFactory.create(MainActivity.this.getResources(),
resource);
circularBitmapDrawable.setCircular(true);
mIv.setImageDrawable(circularBitmapDrawable);
}
});
設定縮放方式
1: CenterCrop()是一個裁剪技術,即縮放影象讓它填充到 ImageView 界限內並且裁剪額外的部分。ImageView 可能會完全填充,但影象可能不會完整顯示。
2: fitCenter() 是裁剪技術,即縮放影象讓影象都測量出來等於或小於 ImageView 的邊界範圍。該影象將會完全顯示,但可能不會填滿整個 ImageView。
獲取快取大小:
new GetDiskCacheSizeTask(mTv)
.execute(new File(getCacheDir(),
DiskCache.Factory.DEFAULT_DISK_CACHE_DIR));
static class GetDiskCacheSizeTask extends AsyncTask<File, Long, Long> {
private final TextView resultView;
public GetDiskCacheSizeTask(TextView resultView) {
this.resultView = resultView;
}
@Override
protected void onPreExecute() {
resultView.setText("Calculating...");
}
@Override
protected void onProgressUpdate(Long... values) { /* onPostExecute(values[values.length - 1]); */ }
@Override
protected Long doInBackground(File... dirs) {
try {
long totalSize = 0;
for (File dir : dirs) {
publishProgress(totalSize);
totalSize += calculateSize(dir);
}
return totalSize;
} catch (RuntimeException ex) {
final String message = String.format("Cannot get size of %s: %s", Arrays.toString(dirs), ex);
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
resultView.setText("error");
Toast.makeText(resultView.getContext(), message, Toast.LENGTH_LONG).show();
}
});
}
return 0L;
}
@Override
protected void onPostExecute(Long size) {
String sizeText = Formatter.formatFileSize(resultView.getContext(), size);
resultView.setText(sizeText);
}
private static long calculateSize(File dir) {
if (dir == null) return 0;
if (!dir.isDirectory()) return dir.length();
long result = 0;
File[] children = dir.listFiles();
if (children != null)
for (File child : children)
result += calculateSize(child);
return result;
}
}
指定資源的優先載入順序:
//優先載入
Glide
.with(context)
.load(R.raw.icon_added)
.priority(Priority.HIGH)
.into(mTv1);
//後加載
Glide
.with(context)
.load(R.raw.icon_added)
.priority(Priority.LOW)
.into(mTv2);
先顯示縮圖,再顯示原圖:
//用原圖的1/10作為縮圖
Glide
.with(this)
.load("http://xxx.png")
.thumbnail(0.1f)
.into(iv_0);
//用其它圖片作為縮圖
DrawableRequestBuilder<Integer> thumbnailRequest = Glide
.with(this)
.load(R.drawable.ic_logo);
Glide.with(this)
.load("http://xxx.png")
.thumbnail(thumbnailRequest)
.into(mIv);
設定監聽請求介面 ,設定監聽的用處 可以用於監控請求發生錯誤來源,以及圖片來源 是記憶體還是磁碟
Glide.with(this).load(imageUrl).listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
//imageView.setImageDrawable(resource);
return false;
}
}).into(imageView);
毛玻璃效果
可以使用第三方封裝好的Glide
compile 'jp.wasabeef:glide-transformations:2.0.1'
注意transformations最新版本為3.0.1 ,使用的Glide為4.0,下面的方法被去除了,暫時還不知道怎麼實現毛玻璃效果,有知道的小夥伴,可以留言,謝謝!
毛玻璃效果實現:
Glide.with(this).load(R.mipmap.bg).bitmapTransform(new BlurTransformation(this, 100))
.into(new SimpleTarget<GlideDrawable>() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super
GlideDrawable> glideAnimation) {
mIv.setBackground(resource);
}
});
提醒:儘量使用淺顏色的圖片,深顏色就成了一片黑的了!
同時這個類主要就是裁剪圖片的,這裡我寫了一個圓角的方法可用
public static ImageView displayCircle(Context context, ImageView img, String url) {
Glide.with(context)
.load(url)
.placeholder(R.drawable.app_loading_pic_round) //載入中的圖片
.error(R.drawable.app_loading_pic_round) //載入失敗的圖片
.override(150, 150)
.bitmapTransform(new CropCircleTransformation(context))
.into(img);
return img;
}
相關推薦
整理Glide方法使用含義(毛玻璃效果,實現圓角等)
現在專案中一般使用Glide進行圖片載入,於是找一下他的各個方法的使用,方便使用而已。 新增依賴: compile 'com.github.bumptech.glide:glide:3.7.0' 基本使用: Glide .with(
TCP連線擁塞控制四種方法總結(詳細簡單,穩的一批)
擁塞控制的一般原理 在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就要變換,叫做擁塞 擁塞控制和流量控制的區別: 擁塞控制往往是一種全域性的,防止過多的資料注入到網路之中,而TCP連線的端點只要不能收到對方的確認資訊,猜想在網路中發生了擁塞,但並不知道發生
濾鏡CIFilter簡單處理(模糊效果,舊色調處理)
簡單建立CIFilter 沒有專業處理, 僅能達到簡單的模糊效果,效果如圖 (1)原圖 (2)舊色調處理效果 (3)模糊處理 簡單的程式碼結果如下 // // ViewController.m // 濾鏡 // 本文檢視部落格地址http://blog
drawBitmap 適配多解析度(追求效果,做多圖)
Rect src = new Rect(x1, y2, cx1,cy1);Rect dst = new Rect(x2, y2, cx2, cy2);canvas.drawBitmap(mBitmap, src, dst, null); 第一個矩形,是你想擷取的bit
MFC如何拷貝資源(對話方塊,工具欄等)
MFC的資源機制是兩個檔案的配合,xxx.rc(xxx為專案名稱)檔案和resource.h檔案的配合,res.rc以指令碼的形式描述了資源的形式,如***對話方塊大小,ID,有什麼按鈕,按鈕的ID等等 如“關於”對話方塊在rc檔案內的描述(怎麼開啟,找到rc檔案,資源管
全面屏適配(小米8,三星s8等)
引入問題: 使用者提出自己的小米8手機執行app時候底部有黑邊,因為是內部系統不方便截圖,我這裡就從miui裡找了一個圖來代替 開始還擔心是螢幕適配的問題(dimens適配),但是系統中只適配橫向,縱向不做適配; 下次發版前給使用者的臨時處理方案: 設定-全面屏-應用全面屏執行設定
對PPT的操作(文字替換,圖片插入等)
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using POWER
樹梅派Ubuntu mate 16.04 首次安裝配置(中文輸入法,顯示配置等)
1.樹梅派開機自動登入配置 我們希望能在跳過登陸介面,自動登陸後直接啟動程式,可以進行一下配置。 sudo vim /etc/lightdm/lightdm.conf 如果沒有v
使用ADO GetChunk/AppendChunk 資料庫存取二進位制檔案(如程式,圖象等)
在設計資料庫的過程中,我們會經常要儲存一些圖形、長文字、多媒體(視訊、音訊檔案)等各種各樣的程式檔案,如果我們在資料庫中僅儲存這些檔案的路徑資訊,儘管這可以大大地減小資料庫的大小,但是由於檔案存在磁碟上,我們除了維護資料庫外還要維護檔案的路徑資訊,保持二者的一致,這對於我們
CentOS 掛載硬件設備(U盤,硬盤等)
epel etc usb umount fdisk命令 asn shm fix 不用 1、掛載fat或者fat32分區的U盤 如果是用VM安裝的linux,在vm裏掛載U盤有兩個前提: 第一,主機裏的service要啟動: 第二,U盤是連接到虛擬機,而不是主機,需要確認這
sqlite(sql)替換特殊字元(換行,tab鍵等)
換tab sql語句: UPDATE table_name SET field_name=REPLACE(field_name,char(09),'') 但是 sqlite會報錯 在sqlite中 換tab 為x'09'所以sql為: update question_
VS2010利用巨集快速添加註釋(函式描述,修改註釋等)
在敲程式碼的過程中類和函式都需要進行註釋,但總是一遍一遍的複製貼上覺得很是麻煩,終於找到了一個不錯的解決方法:使用巨集。 所謂巨集,就是一些命令組織在一起,作為一個單獨命令完成一個特定任務。在日常的辦公環境中,不論是Office還是Foxmail以及我們所使用的
Android Studio主題設定(介面背景,字型顏色等)
話不多說直接上鍊接吧~ http://color-themes.com/?view=index 下載想要的主題,開啟AS → File → Import Settings 然後重啟。如果想換就在Se
scrapy的一些容易忽視的點(模擬登陸,傳遞item等)
信息 pan pytho 完成 xtra author back book 多少 scrapy爬蟲註意事項 item數據只有最後一條 item字段傳遞後錯誤,混亂 對一個頁面要進行兩種或多種不同的解析 xpath中contains的使用 提取不在標簽內的文本內容 使用cs
自己實戰整理面試題--Mysql(帶答案,不斷更新)
mysql目前用的版本? 5.1.21;目前最高5.7.* left join,right join,inner join? left join(左連線) 返回包括左表中的所有記錄和右表中連線欄位相等的記錄 right join(右連線) 返回包括右表中的所有記錄和左
自己實戰整理面試題--鎖(帶答案,不斷更新)
java有哪些鎖? Synchronized 和 ReentrantLock? 1、synchronized是重量級鎖? 從JDK 1.5 到 JDK 1.6 有一個高效併發方面的重要改進,HotSpot虛擬機器開發團隊在這個版本中花費了很大的精力去對Java中的鎖進行優化(synchr
自己實戰整理面試題--JVM(帶答案,不斷更新)
jvm記憶體模型,java記憶體模型,GC機制和原理; 物件是否可 GC? GC分哪兩種,Minor GC 和Full GC有什麼區別?什麼時候會觸發Full GC?分別採用什麼演算法? 垃圾回收演算法 垃圾回收器 G1 常見的JVM調優方法有哪些?可以具體到調整哪個引數,調成什麼值? JVM虛
自己實戰整理面試題--集合(帶答案,不斷更新)
Set 和 List 區別? ArrayList 和 LinkedList 區別? 如果存取相同的資料,ArrayList 和 LinkedList 誰佔用空間更大? List 和 Map 區別,Arraylist 與 LinkedList 區別,ArrayList 與 Vector 區別? S
自己實戰整理面試題--Redis(帶答案,不斷更新)
Redis應用場景? 分散式鎖:通過setnx/del命令來實現,不完美的是由於業務場景比較多,所以,有些瑕疵,比如:setnx/del命令是非原子性的,存在執行完setnx但是沒有執行del的情況,導致鎖無法釋放,針對這種情況Redis的團隊加入了一些引數特性,給鎖加上過期時間,我的理解時
自己實戰整理面試題--Spring(帶答案,不斷更新)
Spring 的原理? Spring的核心主要是IOC和AOP;從Spring簡單的來說,是通過對POJO開發的支援,來具體實現的;Spring通過為應用開發提供基於POJO的開發模式,把應用開發和複雜的Java EE服務,實現解耦,並通過提高單元測試的覆蓋率,從而有效的提