iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 25
1
自我挑戰組

Android初學筆記系列 第 25

Day 25 - 使用Picasso讀取圖片

  • 分享至 

  • xImage
  •  

Everything you can imagine is real. – Pablo Picasso

Picasso是用來讀取圖片的第三方套件,在讀取網路圖片時非常好用,只要一行程式碼就能下載並顯示,且支援快取和縮放大小等功能,當然要用在本機圖片也是可以的喔。

同為Square公司的作品,Picasso比前兩天提到的OkHttp和Retrofit簡潔的多,簡潔到我在開頭先加一句畢卡索的名言充字數(它跟今天內容一點關係都沒有),大家可以一掃昨天的陰霾,帶著愉悅的心情跟畢卡索一起顯示圖片。

加入dependencies

compile 'com.squareup.picasso:picasso:2.5.2'

加入網路權限

因為要讀取網路圖片,所以也要記得在AndroidManifest.xml中加入權限

<uses-permission android:name="android.permission.INTERNET"/>

介面檔

簡單的放個ImageVIew就好

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="300dp"
        android:layout_height="300dp"/>
        
</RelativeLayout>

讀取圖片

Picasso只要一行程式碼就能下載並顯示圖片,真心不騙

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 連結ImageView
        ImageView image_view = (ImageView) findViewById(R.id.image_view);
        // 讀取圖片
        Picasso.with(this).load("http://i.imgur.com/XY1856Y.png").into(image_view);
    }
}

執行結果
http://ithelp.ithome.com.tw/upload/images/20170109/20103849IFFqQC3ubf.png

Picasso會自動儲存快取,您可以嘗試把裝置的網路關掉再重啟APP,此時雖為離線但圖片仍能顯示

幾個我常用的屬性直接寫在一起介紹,大家依需求選用

Picasso.with(this)
        .load("http://i.imgur.com/XY1856Y.png") // 圖片路徑
        .placeholder(R.mipmap.ic_launcher)  // 圖片讀取完成之前先顯示的佔位圖
        .error(R.mipmap.ic_launcher)        // 圖片讀取失敗時要顯示的錯誤圖
        .resize(200, 200)   // 將圖片寬高轉為200*200 pixel
        .centerInside()     // 與resize搭配使用,將調整過的圖片完整塞進ImageView中
        .fit()              // 與resize只能擇一使用,將圖片寬高轉為ImageView的大小
        .rotate(90)         // 將圖片旋轉90度
        .into(image_view);  // 要顯示圖的View

若要添加Listener可以這樣寫,在into裡面加上Callback

Picasso.with(this)
        .load("http://i.imgur.com/XY1856Y.png")  // 圖片路徑
        .into(image_view, new Callback() {
            @Override
            public void onSuccess() {
                // 圖片讀取完成
                Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError() {
                // 圖片讀取失敗
            }
});

還有一些進階的功能,可以參考FutureStudio的教學,依照功能分段寫得很仔細。


目前著名的讀圖套件大概有Picasso、UIL、Glide和Fresco四個,Picasso也許不是整體最好的,但我覺得它很好上手,對初學者非常友善,且也不乏進階功能讓我們深入使用。

今天介紹完Square網路套裝的最後一套,總結來說,讀取圖片用Picasso,與API連線用Retrofit,超出以上範圍時就用OkHttp,應能輕鬆處理絕大多數的網路問題哦。


上一篇
Day 24 - 使用Retrofit與API連線
下一篇
Day 26 - BroadcastReceiver接收事件
系列文
Android初學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言