1. 程式人生 > >SubsamplingScaleImageView(可用於做圖片瀏覽器)使用說明

SubsamplingScaleImageView(可用於做圖片瀏覽器)使用說明

之前的圖片瀏覽器一直都是壓縮過的bitmap,在顯示一些長圖、高清原圖的時候就杯具了,全是馬賽克,後來需求來了,只好藉助第三方庫,功夫不負有心人,找到一個不錯的庫,功能也齊全,效果也好,現在就推薦給大家。

該庫的名字:SubsamplingScaleImageView(subsampling-scale-image-view)

下面我們來簡單的說說怎麼使用。

首先我們需要在 build.gradle 裡面加入依賴:

dependencies {

    ...

    compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.6.0'
    
    ...
}

(之前用的時候匯入的版本是 3.5.0, 後來換了 3.6.0,圖片處理顯示的速度有了明顯的提升,所以強烈推薦 3.6.0)

接著在佈局 XML 裡面跟普通的 imageview 一樣去使用:

<com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView

    android:id="@+id/iv_pic"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:gravity="center" />

跟 imageview 不同的是在程式碼中的操作,先說圖片的載入顯示:

該庫有一個類,ImageSource,調出方法,可以看到有以下幾種:

ImageSource.asset(String assetName)
ImageSource.resource(int resId)
ImageSource.uri(String uri)
ImageSource.uri(Uri uri)
ImageSource.bitmap(Bitmap bitmap)

看方法名字不難理解,第一個是取 asset 目錄裡面的圖片,第二個是取 drawable 目錄裡面的,第三個是通過檔案路徑取,第四個是通過 Uri,最後一個則是直接顯示bitmap。

這裡我們需要注意最後一個,官方給出這樣的提示:

Or, if you have a Bitmap object in memory, load it into the view. This is unsuitable for large images because it bypasses subsampling - you may get an OutOfMemoryError.

大概意思就是說如果你通過 bitmap 的形式去載入顯示圖片,那麼你得處理 OOM ,因為這種形式會繞過該庫本身對圖片的處理,所以如果我們要顯示高清大圖,那麼請不要用最後一種。

接下來我們要把這個 ImageSource 傳給 view ,下面貼出以第三種通過檔案路徑方式的程式碼:

SubsamplingScaleImageView photoView = (SubsamplingScaleImageView) view.findViewById(R.id.iv_pic);
photoView.setImage(ImageSource.uri(fileString));

很簡單,這樣就可以顯示高清大圖,同時也預設會開啟縮放功能了。

這時有人問了,要是載入超過該庫所能承受範圍的圖片呢,會不會崩掉?其實該庫有對應的 OOM catch操作,超過其範圍不能顯示的圖片只會造成圖片不顯示,不會造成崩潰,所以不需要再自己寫 try catch 去捕獲 OOM。

當然,如果你不想要縮放功能,那也可以通過 photoView.setZoomEnabled(boolean zoomEnabled) 去開啟或關閉縮放功能。

接下來再說說部分可能會經常用到的其它介面:

1、回收

該庫提供了回收的方法,呼叫也很簡單:photoView.recycle()

當然也要注意,部分情況是不適合回收的,比如第二種取 drawable 目錄裡面的圖片。對於圖片瀏覽器模組,如果圖片瀏覽器是可以左右滑動切換圖片的話那麼建議進行回收處理,至於怎麼判斷是不是適合回收的情況可以通過像 photoView.setContentDescription(String description) 等方法去打上標識,然後回收的時候再根據這個標識去判斷是否要進行回收。

2、旋轉角度

直接呼叫:

photoView.setOrientation(int orientation)

引數分別有:

ORIENTATION_USE_EXIF: Attempt to use the file's EXIF data to automatically rotate it. Supported for files only, not assets or resources.(根據檔案的EXIF,只適用於檔案)
ORIENTATION_0: Display image in its native orientation. (原始的方向)
ORIENTATION_90: Rotate the image 90° clockwise. (順時針 90 度)
ORIENTATION_180: Rotate the image 180°.(順時針 180 度)
ORIENTATION_270: Rotate the image 270° clockwise.(順時針 270 度)

當然還有很多其它的介面,比如圖片偏移、縮放的相關設定等,這裡就不一一列舉,這個得看個人需求去設定了。

另外再補充一點,該庫不支援 GIF,所以如果圖片瀏覽器要同時再處理 GIF 的話那麼建議再留出一個 imageview 單獨進行處理(可以利用像 Glide 之類的庫)。

相關推薦

SubsamplingScaleImageView用於圖片瀏覽器使用說明

之前的圖片瀏覽器一直都是壓縮過的bitmap,在顯示一些長圖、高清原圖的時候就杯具了,全是馬賽克,後來需求來了,只好藉助第三方庫,功夫不負有心人,找到一個不錯的庫,功能也齊全,效果也好,現在就推薦給大家。 該庫的名字:SubsamplingScaleImageView(su

HTML學習筆記 cs動畫基礎分列效果用於瀑布流 第十五節 原創 參考使用表

har orm 顏色 無限 動畫 ext top 效果 rotate <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> &

修改圖片載入框架Glide的快取路徑用於清理快取需求

1.寫一個類實現  GlideModule public class GlideCacheMore implements GlideModule { private String path=Environment.getExternalStorageDirector

JavaScript中的異常處理用於驗證輸入等

首先是三個語句的含義: try 語句測試程式碼塊的錯誤。 catch 語句處理錯誤。 throw 語句建立自定義錯誤。 JavaScript 丟擲錯誤 當錯誤發生時,JavaScript 引擎通常會停止,並生成一個錯誤訊息。 描述這種情況的技術術

JAVA 獲取相差天數和獲取一日期相差某天數後的日期用於計算各種紀念日

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor

Python進階之爬蟲url去重用於檔案去重

主要介紹幾個常用和目前瞭解的,當然還有其他方法,這裡只說目前本人自己能實現的幾種方法的基本思想:基於Hash演算法的儲存。對每一個給定的URL,都是用一個已經建立好的Hash函式,對映到某個實體地址上。當需要進行檢測URL是否重複的時候,只需要將這個URL進行Hash對映,如

WebStorm 10 及以上版本如何更換主題 用於WebStorm 2016.3

首先我們要下載一個 主題,這裡我推薦用的主題是 MONOKAI SUBLIME 這一個,跟sublime 的預設主題是一樣的,用慣了sublime的同學可能用起來會舒服點。(ps:下載下來的檔案是xml檔案) (沒有翻牆可能訪問速度比較慢,我在這貼出一

圖的儲存-鏈式前向星池子法用於樹形dp建樹

歡迎點選檢視 不過您仍可閱讀本文在網易部落格的副本: ======================================================  “鏈式前向星”是我創造的(至少Baidu上沒有搜到)名詞,或許這種資料結構有其他更加正規易懂的名字,但我還是沒有搜到。(有一個資

仿支付寶獎勵金的時間軸用於垂直進度條

前言: 這是一個,既可以用做時間軸,也可以用做垂直進度條的自定義控制元件。(沒有用系統的Progress控制元件,進度是自己用Canvas畫的)。 先看Gif效果圖: 通過介面,來定義自定義控制元件的功能。閱讀程式碼的時候,看介面就行。具體功能,再到自

Jquery 判斷滾動條到達頂部或底部 用於上拉下拉加載刷新

ready UNC 判斷 獲取 scrip () ext 上拉 fun <script type="text/javascript"> $(document).ready(function() { $(window).scroll(fun

【全網最高端?】中綴表達式轉為後綴表達式以及求值用於負數,階乘

long pac pri rep += arch truct sin 必須 代碼裏有註釋。。。直接上代碼。。。 #include<bits/stdc++.h> #define rep(i,k,n) for(int i=k;i<=n;i++) #define

markdown 設定圖片尺寸用於 CSDN、github

使用 ![imgName]() 顯示原始圖片 使用 html 顯示設定尺寸圖片 使用 ![imgName]() 顯示原始圖片 程式碼: ![這裡寫圖片描述](https://img-bl

centos 7 使用sed命令去除字串中的空格用於去除檔名的空格

1.刪除字串行首空格(刪除檔名首部空格)      sed 's/^[ \t]*//g' 2. 刪除字串行尾空格(刪除檔名尾部空格)     sed 's/[ \t]*$//g' 3.去除字串中所有空格(去除字串中所有空格)

C++工作筆記-3種方法對資料型別進行拆分用於各種協議

比如用Long Long存3個數據的內容。 這裡要知道大小端的知識點。 方法一是用位運算; 方法二是用指標; 方法三是結構體(本質上也是指標); 執行截圖如下: 原始碼如下: main.cpp #include <iostream> using

mysql資料庫刪除用於linux

       由於在9月30號粗暴地打斷了一個匯入程序,今天發現MySQL竟然不能啟動了,只好解除安裝重灌(也許可以花些時間查詢問題,但是這個來的更快些)。重啟匯入程序,卻出現了資料庫已存在的提示資訊。於是就進入命令列

小技巧 - 如何下載微信公眾號音訊?附:此方法用於類似的Web

前言 最近在找歌曲,發現很多平臺歌曲很難找,甚至下載要收費,如此就想到一般微信公眾號上都會有歌曲音訊,但是遇到一個問題就是如何下載裡面的音訊,以前也發過一篇技巧文章,“通過審查元素來搜尋帶有MP3、MP4字眼的模組來獲取下載連結”,但是這種方法考慮安全問題,後來很多平臺不支援了,會

Unity 物體根據滑鼠移動而轉動用於物體的360度展示PC端

有時候會有這個需求,就是物品的360度的展示,例如武將的全方位展示,或是物品的360度展示,這就需要根據滑鼠的移動來轉動物體 而這個就可以實現哦!!! using UnityEngine; using System.Collections; public class D

全文檢索工具迅搜的安裝和體驗用於自建中文全文搜尋引擎

1、Ubuntu環境下安裝:    1)LNMP安裝:參考https://lnmp.org/install.html      #wget -c http://mirrors.duapp.com/lnmp/lnmp1.3-full.tar.gz && tar

JavaScript獲取子視窗、父視窗的內容用於頁面之間傳遞內容

1、Window物件的opener屬性:返回對建立此視窗的視窗的引用 註釋:只有表示頂層視窗的 Window 物件的 operner 屬性才有效,表示框架的 Window 物件的 opern

js使瀏覽器視窗最大化用於IE的方法

這裡使用的方法是IE的私有特性,只能在IE中有效。主要是window.moveTo和window.resizeTo方法。    效果和點選最大化按鈕差不多,有一點區別。點選最大化按鈕後,瀏覽器的內容填充滿顯示器,瀏覽器視窗的邊框被擠出顯示器。而該js的最大化效果是瀏覽