十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
??先很負(fù)責(zé)任的說一下,這個內(nèi)容也是百度來的,但是很不負(fù)責(zé)任的是,當(dāng)初只記錄解決方案,忘了記錄是查看的哪篇博客了,這里先對不知道借鑒的誰表示感謝。無法分享鏈接,就厚著臉皮把(轉(zhuǎn))字去掉了,請大家諒解。

霍城網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,霍城網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為霍城成百上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的霍城做網(wǎng)站的公司定做!
??先提供一下 Android知識點——目錄 的鏈接,然后讓我們進(jìn)入正題。
??實際上,這篇博客所說的內(nèi)容并不是所有人都可以用到,畢竟大多數(shù)時候,我們只需要展示圖片,而并不需要知道圖片的寬高;有的時候我們只需要知道展示的寬高(即ImageView)的寬高,不需要知道圖片資源的實際尺寸。
??但是需求千千萬萬嘛,以程序員的腦洞,怎么能想到產(chǎn)品的腦洞究竟有多大呢?我這里就遇到了一個需求,那就是需要在一個可縮放的圖片上標(biāo)注icon(類似地圖上的marker)。這還不算完,畢竟在找到的圖片縮放控件 PhotoView 中,我們點擊到圖片上后,是有點擊點位在整個圖片上的百分比坐標(biāo)回調(diào)的。而多端通過百分比是很容易就能在圖片中獲取到相同的點位,并回顯出對應(yīng)的icon的(沒辦法,誰讓我找的是方便計算百分比的呢),結(jié)果Web端優(yōu)先做了這部分功能,使用的是在原圖上的具體坐標(biāo)。這樣我百分比的計劃自然就落空了,只能想辦法計算出具體的點位。
??因此獲取圖片的原始尺寸就是一個必不可少的環(huán)節(jié),我剛剛百度了一下,查到 wangke_king 的 Android獲取圖片的寬度和高度 中使用的方法是:
??我這里沒有親測過,不過應(yīng)該是沒有問題,但是很遺憾我們的需求是在網(wǎng)絡(luò)圖片上做測量,所以這個方法也無法使用,不過如果其他有類似本地圖片需求的,不妨嘗試一下。而我之前找到的解決方案為:
??首先說明,上述的方法是可以實現(xiàn)圖片的尺寸測量的,只是有一個小小的問題,那就是想要計算出Drawable的寬高,需要必須等到圖片加載完成之后,嘗試了使用view.post(),監(jiān)聽組件加載完成,但是并不是每次都能獲取到Drawable的寬高,因此當(dāng)初的解決方案是寫了個兩秒鐘的定時器,每50毫秒測量一次,直到獲取到值為止。這樣的解決方案可謂是相當(dāng)無腦了,而且還要消耗很多不必要的資源。
??還好皇天不負(fù)有心人啊,終于找到了通過Glide獲取圖片寬高的方式:
??這樣我們就可以通過回調(diào),在Glide將網(wǎng)絡(luò)圖片注入到對應(yīng)的圖片組件的時候,得到圖片的Bitmap,然后在通過Bitmap來獲取圖片的寬高。但是需要注意的一點是,Bitmap的泛型是需要手動去設(shè)置的哦。
??另外SimpleTarget現(xiàn)在已經(jīng)過時,暫時還沒有查到。我搜索過SimpleTarget過時使用什么替換,有一些說法是使用BitmapImageViewTarget ,不過下面是實際測試結(jié)果。
圖片鏈接:
百度圖片-景色
測量結(jié)果:
圖片信息:
如果不是我使用有誤的話,BitmapImageViewTarget 是無法替換SimpleTarget ,實現(xiàn)測量圖片原始寬高的功能的。
這里的字符或者字符串的寬度,計算的是其像素值。有以下兩種方法:方法1:
Paint paint= new Paint();
Rect rect = new Rect();
//返回包圍整個字符串的最小的一個Rect區(qū)域
paint.getTextBounds(str, 0, 1, rect);
int strwidth = rect.width();
int strheight = rect.height();方法2:
//直接返回參數(shù)字符串所占用的寬度
float strwidth = paint.measureText(str);
對于字符而言,可以將字符轉(zhuǎn)換成字符串,然后計算。例如:
char c = 'c';
然后利用上面兩種方法即可。
在一個Activity的onCreate方法中,寫入如下代碼:DisplayMetrics metric = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(metric);int width = metric.widthPixels; // 屏幕寬度(像素)int height = metric.heightPixels; // 屏幕高度(像素)float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240) AndroidManifest.xml文件中,加入supports-screens節(jié)點,具體的內(nèi)容如下:supports-screensandroid:smallScreens="true"android:normalScreens="true"android:largeScreens="true"android:resizeable="true"android:anyDensity="true" /這樣的話,當(dāng)前的Android程序就支持了多種分辨率,那么就可以得到正確的物理尺寸了。
用getWidth()方法,可以獲取像素單位的寬度。
android的控件一般是繼承的android.View這個類,所以可以直接用View#getWidth()方法獲取控件寬度。另外這個方法是final方法,無法被子類覆蓋,所以可以安心調(diào)用
設(shè)置問題。根據(jù)查詢android系統(tǒng)相關(guān)設(shè)置得知,android系統(tǒng)js獲取寬度可以用一下方式:
1、通過WindowManager來獲取,
2、另一種通過Resources來獲取。獲取屏幕高寬方式大同小異,主要是獲取到屏幕的DisplayMetrics。