imageview中有個很重要也很常用的屬性android:scaletype
,相信大家都應該不陌生,主要用於控制在imageview中顯示的樣式,比如顯示大小、顯示位置、顯示內容區域。當然也可以在**中設定:setscaletype(imageview.scaletype.***);
scaletype的取值一共有8種:fitcenter
,fitend
,center
,centercrop
,centerinside
,matrix
,fitxy
,fitstart
。其中預設值是fitcenter。 我們先來看比較簡單的center
吧,乙個60dp*40dp的imageview(為了顯示效果,背景設成藍色)裡面放了張20dp*20dp的。上圖看看效果:
center
的含義是:保持原圖的大小,顯示在imageview的中心。當原圖的size大於imageview的size,超過部分裁剪處理。 再來看比較「暴力」的fitxy
:
嗯,接下來我們...什麼?難道你以為我要把剩下的6種樣式都貼張圖出來,然後愉快地水一篇部落格嗎?
所以接下來我放大招了,開始分析原始碼!
上面設定了這麼多種scaletype
,那麼最終生效的位置在哪呢?答案就在configurebounds()
方法裡,限於篇幅我貼了上面兩種樣式的法,其他的樣式實現也都類似。
private
void
configurebounds
() else else
} if (scaletype.center == mscaletype)
複製**
可以看到最終的實現用到了drawable類和matrix類的方法。前者大家都很熟悉,就是我們設定的要顯示的,而matrix叫做矩陣,是乙個專門用來處理圖形變換中的重要工具類,熟悉自定義view的同學應該對它不陌生,canvas.setmatrix(matrix)
可以做出很多獨特效果來。而我們今天的主角是imageview
,所以沒錯imageview
也有這個方法:
imageview.setimagematrix(matrix)
通過上述方法我們就能將自己定義的matrix應用到imageview中。可以看到原始碼,要使這個方法生效,scaletype一定要設為matrix,不然執行完自己的變換後還是會執行樣式自己的變換,相當於沒執行。
fit_xy
的實現很簡單,就用到了setbounds(int left, int top, int right, int bottom)
,這個四引數指的是drawable的繪製區域。center
用到了posttranslate(float dx, float dy)
,將drawable
移到imageview中間,因為沒有其他處理,如果比imageview大,那麼多餘的區域就會被裁剪掉,不顯示了。
int m = 20;
//平移
private
void
onclick
(view v)
複製**
來看看效果:
通過改變posttranslate
引數的值我們就能改變在view中繪製的起始位置。 當然不會這麼簡單。matrix還有其他方法:postrotate(float degrees, float px, float py)
//旋** 我們仿照center的處理將移到imageview中心,然後進行旋**
int m = 20;
//旋轉
private
void
onclick
(view v)
複製**
看看效果:
說了這麼多,這篇文章就是給大家介紹了android:scaletype
的自定義用法,當遇到imageview預設的顯示模式不能滿足我們現有需求的時候(比如我就遇到原圖按照原來的大小居底部顯示,如果原圖的大小超過了imageview的大小,那麼就剪裁掉多餘部分,保留底部,和centercrop裁剪四周有所不同),我們就可以動態設定自己的matrix來自定義顯示效果。當然如果你經常要用到這種方式的時候,可以繼承imageview,封裝這些自定義樣式。
Tkinter 之Scale滑塊標籤
一 引數說明 語法作用 scale window,label 滑塊 滑塊標題 scale window,label 滑塊 from 0 滑塊最小值為0 scale window,label 滑塊 to 100 滑塊最大值為100 scale window,label 滑塊 length 200 滑塊...
Caffe之Scale層原始碼
最近要對模型進行壓縮使用slimming,因此需要scale層對scale diff進行l1正則。所以對原始碼進行了閱讀。公式 y ax b。公式比較簡單。上述公式的意思是,對feature map乘以a,並加b。乙個feature map共用乙個a,因此 a的維度是 c 這是理解原始碼的前提。反向...
iTween基礎之Scale(縮放大小)
一 基礎介紹 scaleto 改變遊戲物件的比例大小到提供的值。scalefrom 將物體的大小從提供的值變化到原來的大小 scaleadd 增加遊戲物體的大小。scaleby 成倍改變物體大小。amount引數為倍數。scaleupdate 類似於scaleto 在update 方法或迴圈環境中呼...