Android知識點——Glide獲取圖片寬高

先扯兩句

??先很負責任的說一下,這個內容也是百度來的动羽,但是很不負責任的是包帚,當初只記錄解決方案,忘了記錄是查看的哪篇博客了运吓,這里先對不知道借鑒的誰表示感謝渴邦。無法分享鏈接,就厚著臉皮把(轉)字去掉了拘哨,請大家諒解谋梭。

??先提供一下Android知識點——目錄的鏈接,然后讓我們進入正題倦青。

正文

??實際上瓮床,這篇博客所說的內容并不是所有人都可以用到,畢竟大多數時候姨夹,我們只需要展示圖片纤垂,而并不需要知道圖片的寬高;有的時候我們只需要知道展示的寬高(即ImageView)的寬高磷账,不需要知道圖片資源的實際尺寸峭沦。

??但是需求千千萬萬嘛,以程序員的腦洞逃糟,怎么能想到產品的腦洞究竟有多大呢吼鱼?我這里就遇到了一個需求,那就是需要在一個可縮放的圖片上標注icon(類似地圖上的marker)绰咽。這還不算完菇肃,畢竟在找到的圖片縮放控件PhotoView中,我們點擊到圖片上后取募,是有點擊點位在整個圖片上的百分比坐標回調的琐谤。而多端通過百分比是很容易就能在圖片中獲取到相同的點位,并回顯出對應的icon的(沒辦法玩敏,誰讓我找的是方便計算百分比的呢)斗忌,結果Web端優(yōu)先做了這部分功能,使用的是在原圖上的具體坐標旺聚。這樣我百分比的計劃自然就落空了织阳,只能想辦法計算出具體的點位。

??因此獲取圖片的原始尺寸就是一個必不可少的環(huán)節(jié)砰粹,我剛剛百度了一下唧躲,查到wangke_kingAndroid獲取圖片的寬度和高度中使用的方法是:

BitmapFactory.Options options = new BitmapFactory.Options();
BitmapFactory.decodeResource(getResources(),R.drawable.ico,options);

//獲取圖片的寬高
int height = options.outHeight;
int width = options.outWidth;

Log.i("wk","圖片的寬度:"+width+"圖片的高度:"+height);

??我這里沒有親測過,不過應該是沒有問題,但是很遺憾我們的需求是在網絡圖片上做測量弄痹,所以這個方法也無法使用饭入,不過如果其他有類似本地圖片需求的,不妨嘗試一下肛真。而我之前找到的解決方案為:

photoView.getDrawable().getBounds().width();
photoView.getDrawable().getBounds().height();

??首先說明圣拄,上述的方法是可以實現圖片的尺寸測量的,只是有一個小小的問題毁欣,那就是想要計算出Drawable的寬高,需要必須等到圖片加載完成之后岳掐,嘗試了使用view.post()凭疮,監(jiān)聽組件加載完成,但是并不是每次都能獲取到Drawable的寬高串述,因此當初的解決方案是寫了個兩秒鐘的定時器执解,每50毫秒測量一次,直到獲取到值為止纲酗。這樣的解決方案可謂是相當無腦了衰腌,而且還要消耗很多不必要的資源。
??還好皇天不負有心人啊觅赊,終于找到了通過Glide獲取圖片寬高的方式:

Glide.with(inDoorView.getContext())
        .load(bitMapResUrl)
        .asBitmap()
        .skipMemoryCache(true)
        .into(new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                maxWidth = resource.getWidth();
                maxHeight = resource.getHeight();
    }
});

??這樣我們就可以通過回調右蕊,在Glide將網絡圖片注入到對應的圖片組件的時候,得到圖片的Bitmap吮螺,然后在通過Bitmap來獲取圖片的寬高饶囚。但是需要注意的一點是,Bitmap的泛型是需要手動去設置的哦鸠补。
??另外SimpleTarget現在已經過時萝风,暫時還沒有查到。我搜索過SimpleTarget過時使用什么替換紫岩,有一些說法是使用BitmapImageViewTarget 规惰,不過下面是實際測試結果。
圖片鏈接:
百度圖片-景色

SimpleTarget simpleTarget = new SimpleTarget<Bitmap>(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) {
    @Override
    public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
        photoZoom.setImageBitmap(resource);
        rw = resource.getWidth();
        rh = resource.getHeight();
        Logger.i(getName(), "\n******************\nSimpleTarget:\nresource Width : " + resource.getWidth()
                + "\nresource Width " + resource.getHeight() +
                "\n******************");
        updateList();
    }
};

GlideUtils.loadImageView(mContext, bgPath, simpleTarget);

BitmapImageViewTarget viewTarget = new BitmapImageViewTarget(photoZoom) {
    @Override
    public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
        super.onResourceReady(resource, transition);
        photoZoom.setImageBitmap(resource);
        rw = resource.getWidth();
        rh = resource.getHeight();
        Logger.i(getName(), "\n******************\nBitmapImageViewTarget:\nresource Width : " + resource.getWidth()
                + "\nresource Width " + resource.getHeight() +
                "\n******************");
        updateList();
    }
};
GlideUtils.loadImageView(mContext, bgPath, viewTarget);

...

private String getName() {
    return getClass().getSimpleName();
}

測量結果:

2019-11-23 23:12:50.630 1691-1691/com.bsw.mydemo I/BswFloorPointView: 
    ******************
    SimpleTarget:
    resource Width : 500
    resource Width 334
    ******************
2019-11-23 23:12:50.690 1691-1691/com.bsw.mydemo I/BswFloorPointView: 
    ******************
    BitmapImageViewTarget:
    resource Width : 3234
    resource Width 2160
    ******************

圖片信息:


圖片尺寸

如果不是我使用有誤的話泉蝌,BitmapImageViewTarget 是無法替換SimpleTarget 歇万,實現測量圖片原始寬高的功能的。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末梨与,一起剝皮案震驚了整個濱河市堕花,隨后出現的幾起案子,更是在濱河造成了極大的恐慌粥鞋,老刑警劉巖缘挽,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡壕曼,警方通過查閱死者的電腦和手機苏研,發(fā)現死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腮郊,“玉大人摹蘑,你說我怎么就攤上這事≡桑” “怎么了衅鹿?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長过咬。 經常有香客問我大渤,道長,這世上最難降的妖魔是什么掸绞? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任泵三,我火速辦了婚禮,結果婚禮上衔掸,老公的妹妹穿的比我還像新娘烫幕。我一直安慰自己,他們只是感情好敞映,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布较曼。 她就那樣靜靜地躺著,像睡著了一般驱显。 火紅的嫁衣襯著肌膚如雪诗芜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天埃疫,我揣著相機與錄音伏恐,去河邊找鬼。 笑死栓霜,一個胖子當著我的面吹牛翠桦,可吹牛的內容都是我干的。 我是一名探鬼主播胳蛮,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼销凑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仅炊?” 一聲冷哼從身側響起斗幼,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抚垄,沒想到半個月后蜕窿,有當地人在樹林里發(fā)現了一具尸體谋逻,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年桐经,在試婚紗的時候發(fā)現自己被綠了毁兆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡阴挣,死狀恐怖气堕,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情畔咧,我是刑警寧澤茎芭,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站誓沸,受9級特大地震影響骗爆,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蔽介,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煮寡。 院中可真熱鬧虹蓄,春花似錦、人聲如沸幸撕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坐儿。三九已至律胀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間貌矿,已是汗流浹背炭菌。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逛漫,地道東北人黑低。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像酌毡,于是被迫代替她去往敵國和親克握。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容