安卓開發之Picasso框架的使用例子

安卓開發之Picasso框架了解不多了,小編今天來爲各位介紹兩個關于安卓開發之Picasso框架例子,希望這兩個例子能夠幫助到各位。

之前一直使用imageloader這個框架載入圖片,覺得配置很麻煩,覺得使用Picasso這個框架。

什麽是Picasso我就不多說了,大家可以去官網看,http://square.github.io/picasso/。

Picasso使用的方法彙總:

代碼如下


Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
Picasso.with(context).load(url).into(view);
Picasso.with(context).load(url) .resize(50, 50).centerCrop().into(imageView)
//這裏的placeholder將resource傳入通過getResource.getDrawable取資源,所以可以是張圖片也可以是color id
Picasso.with(context).load(url).placeholder(R.drawable.user_placeholder).error(R.drawable.user_placeholder_error).into

(imageView);

Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2);
Picasso.with(context).load(new File(...)).into(imageView3);
//這裏顯示notification的圖片
Picasso.with(activity).load(Data.URLS[new Random().nextInt(Data.URLS.length)]).resizeDimen

(R.dimen.notification_icon_width_height,R.dimen.notification_icon_width_height).into(remoteViews, R.id.photo,

NOTIFICATION_ID, notification);
//這裏是通過設置tag標簽,就是當前傳過來的context,這樣就可以根據這個context tag來pause和resume顯示了
Picasso.with(context).load(url).placeholder(R.drawable.placeholder).error(R.drawable.error).fit().tag(context).into

(view);
//監聽onScrollStateChanged的時候調用執行
picasso.resumeTag(context);
picasso.pauseTag(context);

Picasso.with(context).load(contactUri).placeholder(R.drawable.contact_picture_placeholder).tag(context).into

(holder.icon);
//這個onpause方法裏的這段代碼還是很有意思的
@Override protected void onPause() {
super.onPause();
if (isFinishing()) {
// Always cancel the request here, this is safe to call even if the image has been loaded.
// This ensures that the anonymous callback we have does not prevent the activity from
// being garbage collected. It also prevents our callback from getting invoked even after the
// activity has finished.
Picasso.with(this).cancelRequest(imageView);
}
}
// Trigger the download of the URL asynchronously into the image view.
Picasso.with(context)
.load(url)
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resizeDimen(R.dimen.list_detail_image_size, R.dimen.list_detail_image_size)
.centerInside()
.tag(context)
.into(holder.image);
//Picasso.with使用的是單例模式

Picasso.with(this).cancelTag(this);

然後呢,Picasso還提供了debug的標示,調用picasso的setIndicatorsEnabled方法,true是debug模式,跟蹤代碼其實就是在最後生成的
PicassoDrawable類的ondraw裏繪制了個左上角小三角,根據

代碼如下

public enum LoadedFrom {
MEMORY(Color.GREEN),
DISK(Color.BLUE),
NETWORK(Color.RED);

枚舉裏的不同值標示不同載入來源,這對分析圖片載入有好處。

在Picasso.with()的時候會將執行所需的所有必備元素創建出來,如緩存cache、執行executorService、調度dispatch等,在load()時創建Request,在into()中創建action、bitmapHunter,並最終交給dispatcher執行。


Picasso創建圓形圖像

上篇介紹了Picasso這個框架,git地址是https://github.com/square/picasso。怎麽實現各種各樣的圖片樣式呢,在Picasso裏提供了Transformation這個接口,我們可以自己實現。下面是一個實現圓形圖片的demo;

代碼如下

public class CircleTransform implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
int size = Math.min(source.getWidth(), source.getHeight());

int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;

Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size);
if (squaredBitmap != source) {
source.recycle();
}

Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig());

Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
BitmapShader shader = new BitmapShader(squaredBitmap,
BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
paint.setShader(shader);
paint.setAntiAlias(true);

float r = size / 2f;
canvas.drawCircle(r, r, r, paint);

squaredBitmap.recycle();
return bitmap;
}

@Override
public String key() {
return "circle";
}
}

使用它:

Picasso.with(activity).load(mayorShipImageLink).transform(new CircleTransform()).into(ImageView);

更多相關文章
  • asp教程.net Response.Redirect跳出框架與打開窗口方法跳出框架大概會用到js top.location來實現.Response.Write('<script>top.location='http
  • Yaf框架是一個不錯的php框架了,但是有一些朋友會發現Yaf框架是沒文件名了後綴名的了,下面我們來看看Yaf框架自動添加URL後綴名例子,希望文章對大家有幫助.同Codeigniter一樣,Yaf也設置了幾個鈎子函數,在適當情況下可以接管或改變程序走向.1routerStartup在路由之前觸發這
  • ThinkPHP是一個開源的PHP框架,是爲了簡化企業級應用開發和敏捷Web應用開發而誕生的,下文就來詳細的給各位介紹ThinkPHP入門學習筆記了.ThinkPHP 是一個免費開源的,快速.簡單的面向對象的 輕量級
  • 本例子是利用phpmailer來登錄QQ郵件然後利用QQ郵件向指定郵件發送一封郵件的例子,希望本例子能幫助到各位同學哦.PHP發郵件的例子,發郵件當然需要一個客戶端郵箱,今天這個例子是使用QQ免費企業郵箱來做爲發郵件的郵箱, 代碼如下 <?phpinclude "PHPMailer/ ...
  • php soap擴展簡單對象訪問協定是交換數據的一種協定規範,是一種輕量的.簡單的.基于XML(標准通用標記語言下的一個子集)的協定,它被設計成在WEB上交換結構化的和固化的信息,下面我們來看看小編整理的php soap擴展開啓與__soapCall使用問題例子<?phptry { $clie ...
  • openwrt上開啓sftp了,這個開啓其實就是安裝了,我們下面一起來爲各位介紹openwrt上開啓sftp步驟,希望例子能夠對各位有幫助.一句話代碼opkg updateopkg install openssh-s
  • 郵件群發其實非常的簡單只要利用遍曆發布就可以了,下面本例子利用了phpmailer函數來登錄163郵箱給QQ郵箱發郵件,[email protected] [email protected] 2009-08-07smtp
  • TT語音怎麽開啓懸浮語音球
    TT語音是一個可以讓你在手機中玩遊戲時和小夥伴進行語音聊天了,爲了方便我們一起來看看開啓懸浮語音球的例子,希望文章能夠給各位帶來幫助.1)我們在手機下面點擊[TT語音]之後我們再點擊[開啓語音球]打開進入效果如下.(如下圖)2)然後在打開語音球界面我們點擊[語音球設置]-[授予語音球浮權限].(如下
一周排行