Android Picasso非同步載入圖片庫
阿新 • • 發佈:2019-02-02
可以實現圖片的下載快取功能, 也可用於圖片的轉換。
Gradle引入:compile 'com.squareup.picasso:picasso:2.5.2'
只需要一句程式碼就可以將圖片下載並設定到ImageView上。
Picasso.with(context).load(uri).into(imageView);
其中uri(URI)也可以替換為圖片資源(int)、檔案(File)、檔案路徑(String)。主要特徵
- 在adapter中回收和取消當前的下載;
- 使用最少的記憶體完成複雜的圖形轉換操作;
- 自動的記憶體和硬碟快取;
- 圖形轉換操作,如變換大小,旋轉等,提供了介面來讓使用者可以自定義轉換操作;
- 載入載網路或本地資源;
圖片的轉換
可以寫自己的轉換類,但是必須實現Transformation介面,如:上面的程式碼實現了將圖片切為圓形,如下圖。public class RoundedTransformation 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"; } }
然後設定transform方法就可以了:
Picasso.with(context)
.load(R.drawable.xxx)
.centerCrop()
.resize(200, 200)
.transform(new RoundedTransformation())
.into(imageView);