Android ImageView 總結【轉載】
2011-05-26 11:01:13| 分類:工作 | 標籤:android imageview ui |字號大中小 訂閱
Bitmap bmp = BitmapFactory.decodeResource(getResource(),R.drawalbe.icon1)
int bmpwidth = bmp.getWidth();
int bmpheight = bmp.getHeight();
Matrix matrix = new Matrix();
matrix.postScale(width,height);
Bitmap bm = Bitmap.createBitmap(bmp,0,0,bmpwidth,bmpheight ,matrix,true);
imageView.setImageBitmap(bm);
在Android中不允許ImageView在產生後,動態修改其長度和寬度,
所以要實現圖片發大縮小的功能,必須將原來的ImageView移除,
重新產生一個新的ImageView,並且指定圖片來源給它,再放入Layout中
1、public voidsetVisibility (int visibility)
但是在調用此方法的時候
image.setVisibility(visibility)
其中visibility是int型的參數。對應上面:VISIBLE=0x00000000;INVISIBLE=0x00000004;GONE=0x00000008。
即:
image.setVisibility(0x00000000) / image.setVisibility(View.VISIBLE); 表示顯示;
image.setVisibility(0x00000004) / image.setVisibility(View.INVISIBLE);表示隱藏;
image.setVisibility(0x00000008) / image.setVisibility(View.GONE);表示view不存在。
2、設置顏色的不同方法
color.rgb(255,255,255);
color.RED;
color.parseColor(colorString); 其中colorString可以是:#RRGGBB #AARRGGBB 'red', 'blue', 'green', 'black', 'white', 'gray', 'cyan', 'magenta', 'yellow', 'lightgray', 'darkgray' 等
3、設置圖片指定大小
protected Bitmap scaleImg(Bitmap bm, int newWidth, int newHeight) {
// 圖片源
// Bitmap bm = BitmapFactory.decodeStream(getResources()
// .openRawResource(id));
// 獲得圖片的寬高
int width = bm.getWidth();
int height = bm.getHeight();
// 設置想要的大小
int newWidth1 = newWidth;
int newHeight1 = newHeight;
// 計算縮放比例
float scaleWidth = ((float) newWidth1) / width;
float scaleHeight = ((float) newHeight1) / height;
// 取得想要縮放的matrix參數
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
// 得到新的圖片
Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix,
true);
return newbm;
}
調用:
獲得18×18的圖片
Bitmap bm = BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.icon));
Bitmap newBm = scaleImg(bmImg , 18, 18);
imageView.setImageBitmap(newBm);
android:scaleType:
android:scaleType是控制圖片如何resized/moved來匹對ImageView的size。ImageView.ScaleType / android:scaleType值的意義區別:
CENTER /center 按圖片的原來size居中顯示,當圖片長/寬超過View的長/寬,則截取圖片的居中部分顯示
CENTER_CROP / centerCrop 按比例擴大圖片的size居中顯示,使得圖片長(寬)等於或大於View的長(寬)
CENTER_INSIDE / centerInside 將圖片的內容完整居中顯示,通過按比例縮小或原來的size使得圖片長/寬等於或小於View的長/寬
FIT_CENTER / fitCenter 把圖片按比例擴大/縮小到View的寬度,居中顯示
FIT_END / fitEnd 把圖片按比例擴大/縮小到View的寬度,顯示在View的下部分位置
FIT_START / fitStart 把圖片按比例擴大/縮小到View的寬度,顯示在View的上部分位置
FIT_XY / fitXY 把圖片 不按比例 擴大/縮小到View的大小顯示
MATRIX / matrix 用矩陣來繪製,動態縮小放大圖片來顯示。
XML屬性
屬性名稱 | 描述 |
android:background | 設置背景色/背景圖片。可以通過以下兩種方法設置背景爲透明:”@android:color /transparent”和”@null”。注意TextView默認是透明的,不用寫此屬性,但是Buttom/ImageButton /ImageView想透明的話就得寫這個屬性了。 |
android:clickable | 是否響應點擊事件。 |
android:contentDescription | 設置View的備註說明,作爲一種輔助功能提供,爲一些沒有文字描述的View提供說明,如ImageButton。這裏在界面上不會有效果,自己在程序中控制,可臨時放一點字符串數據。 |
android:drawingCacheQuality | 設置繪圖時半透明質量。有以下值可設置:auto(默認,由框架決定)/high(高質量,使用較高的顏色深度,消耗更多的內存)/low(低質量,使用較低的顏色深度,但是用更少的內存)。 |
android:duplicateParentState | 如果設置此屬性,將直接從父容器中獲取繪圖狀態(光標,按下等)。 見下面代碼部分,注意根據目前測試情況僅僅是獲取繪圖狀態,而沒有獲取事件,也就是你點一下LinearLayout時Button有被點擊的效果,但是不執行點擊事件。 |
android:fadingEdge | 設置拉滾動條時 ,邊框漸變的放向。none(邊框顏色不變),horizontal(水平方向顏色變淡),vertical(垂直方向顏色變淡)。參照fadingEdgeLength的效果圖 |
android:fadingEdgeLength | 設置 邊框漸變的長度。 |
android:fitsSystemWindows | 設置佈局調整時是否考慮系統窗口(如狀態欄) |
android:focusable | 設置是否獲得焦點。若有requestFocus()被調用時,後者優先處理。注意在表單中想設置某一個如 EditText獲取焦點,光設置這個是不行的,需要將這個EditText前面的focusable都設置爲false才行。在Touch模式下獲取焦點需要設置focusableInTouchMode爲true。 |
android:focusableInTouchMode | 設置在Touch模式下View是否能取得焦點。 |
android:hapticFeedbackEnabled | 設置長按時是否接受其他觸摸反饋事件。這裏模擬器沒有試出效果,難道是多點觸摸?找不到資料可以找找performHapticFeedback或HapticFeedback這個關鍵字的資料看看。 |
android:id | 給當前View設置一個在當前layout.xml中的唯一編號,可以通過調用View.findViewById() 或Activity.findViewById()根據這個編號查找到對應的View。不同的layout.xml之間定義相同的id不會衝突。格式如”@+id/btnName” |
android:isScrollContainer | 設置當前View爲滾動容器。這裏沒有測試出效果來,ListView/ GridView/ ScrollView根本就不用設置這個屬性,而EdidText設置android:scrollbars也能出滾動條。 |
android:keepScreenOn | View在可見的情況下是否保持喚醒狀態。
常在LinearLayout使用該屬性,但是模擬器這裏沒有效果。 |
android:longClickable | 設置是否響應長按事件. |
android:minHeight | 設置視圖最小高度 |
android:minWidth | 設置視圖最小寬度度 |
android:nextFocusDown | 設置下方指定視圖獲得下一個焦點。焦點移動是基於一個在給定方向查找最近鄰居的算法。如果指定視圖不存在,移動焦點時將報運行時錯誤。可以設置imeOptions= actionDone,這樣輸入完即跳到下一個焦點。 |
android:nextFocusLeft | 設置左邊指定視圖獲得下一個焦點。 |
android:nextFocusRight | 設置右邊指定視圖獲得下一個焦點。 |
android:nextFocusUp | 設置上方指定視圖獲得下一個焦點。 |
android:onClick | 點擊時從上下文中調用指定的方法。這裏指定一個方法名稱,一般在Activity定義符合如下參數和返回值的函數並將方法名字符串指定爲該值即可:
public void onClickButton(View view) android:onClick=” onClickButton” |
android:padding | 設置上下左右的邊距,以像素爲單位填充空白。 |
android:paddingBottom | 設置底部的邊距,以像素爲單位填充空白。 |
android:paddingLeft | 設置左邊的邊距,以像素爲單位填充空白。 |
android:paddingRight | 設置右邊的邊距,以像素爲單位填充空白。. |
android:paddingTop | 設置上方的邊距,以像素爲單位填充空白。 |
android:saveEnabled | 設置是否在窗口凍結時(如旋轉屏幕)保存View的數據,默認爲true,但是前提是你需要設置id才能自動保存,參見這裏。 |
android:scrollX | 以像素爲單位設置水平方向滾動的的偏移值,在GridView中可看的這個效果。 |
android:scrollY | 以像素爲單位設置垂直方向滾動的的偏移值 |
android:scrollbarAlwaysDrawHorizontalTrack | 設置是否始終顯示垂直滾動條。這裏用ScrollView、ListView測試均沒有效果。 |
android:scrollbarAlwaysDrawVerticalTrack | 設置是否始終顯示垂直滾動條。這裏用ScrollView、ListView測試均沒有效果。 |
android:scrollbarDefaultDelayBeforeFade | 設置N毫秒後開始淡化,以毫秒爲單位。 |
android:scrollbarFadeDuration | 設置滾動條淡出效果(從有到慢慢的變淡直至消失)時間,以毫秒爲單位。Android2.2中滾動條滾動完之後會消失,再滾動又會出來,在1.5、1.6版本里面會一直顯示着。 |
android:scrollbarSize | 設置滾動條的寬度。 |
android:scrollbarStyle | 設置滾動條的風格和位置。設置值:insideOverlay、insideInset、outsideOverlay、outsideInset。這裏沒有試出太多效果,以下依次是outsideOverlay與outsideInset效果截圖比較: |
android:scrollbarThumbHorizontal | 設置水平滾動條的drawable(如顏色)。 |
android:scrollbarThumbVertical | 設置垂直滾動條的drawable(如顏色). |
android:scrollbarTrackHorizontal | 設置水平滾動條背景(軌跡)的色drawable(如顏色) |
android:scrollbarTrackVertical |
設置垂直滾動條背景(軌跡)的drawable注意直接設置顏色值如”android:color/white”將得出很難看的效果,甚至都不理解這個屬性了,這裏可以參見ApiDemos裏res/drawable/ scrollbar_vertical_thumb.xml和scrollbar_vertical_track.xml,設置代碼爲:android:scrollbarTrackVertical ="@drawable/scrollbar_vertical_track" |
android:scrollbars | 設置滾動條顯示。none(隱藏),horizontal(水平),vertical(垂直)。見下列代碼演示使用該屬性讓EditText內有滾動條。但是其他容器如LinearLayout設置了但是沒有效果。 |
android:soundEffectsEnabled | 設置點擊或觸摸時是否有聲音效果 |
android:tag | 設置一個文本標籤。可以通過View.getTag()或 for with View.findViewWithTag()檢索含有該標籤字符串的View。但一般最好通過ID來查詢View,因爲它的速度更快,並且允許編譯時類型檢查。 |
android:visibility | 設置是否顯示View。設置值:visible(默認值,顯示),invisible(不顯示,但是仍然佔用空間),gone(不顯示,不佔用空間) |
XML屬性
屬性名稱 描述
android:background 設置背景色/背景圖片。可以通過以下兩種方法設置背景爲透明:”@android:color/transparent”和”@null”。注意 TextView 默認是透明的,不用寫此屬性,但是Buttom/ImageButton/ImageView想透明的話就得寫這個屬性了。
android:clickable 是否響應點擊事件。
android:contentDescription 設置View的備註說明,作爲一種輔助功能提供,爲一些沒有文字描述的View提供說明,如ImageButton。這裏在界面 上 不會有效果,自己在程序中控制,可臨時放一點字符串數據。
android:drawingCacheQuality 設置繪圖時半透明質量。有以下值可設置:auto(默認,由框架決定)/high(高質量,使用較高的顏色深度,消耗更多的內存)/low(低質量,使用較低的顏色深度,但是用更少的內存)。
android:duplicateParentState 如果設置此屬性,將直接從父容器中獲取繪圖狀態(光標,按下等)。 見下面代碼部分,注意根據目前測試情況僅僅是獲取繪圖狀態,而沒有獲取事件,也就是你點一下LinearLayout時Button有被點擊的效果,但是不執行點擊事件。
android:fadingEdge 設置拉滾動條時 ,邊框漸變的放向。none(邊框顏色不變),horizontal(水平方向顏色變淡),vertical(垂直方向顏色變淡)。參照fadingEdgeLength的效果圖
android:fadingEdgeLength 設置 邊框漸變的長度。
android:fitsSystemWindows 設置佈局調整時是否考慮系統窗口(如狀態欄)
android:focusable 設置是否獲得焦點。若有requestFocus()被調用時,後者優先處理。注意在表單中想設置某一個如EditText獲取焦點,光設置這個是不行的,需要將這個EditText前面的focusable都設置爲false才行。在Touch模式下獲取焦點需要設置 focusableInTouchMode爲true。
android:focusableInTouchMode 設置在Touch模式下View是否能取得焦點。
android:hapticFeedbackEnabled 設置長按時是否接受其他觸摸反饋事件。這裏模擬器沒有試出效果,難道是多點觸摸?找不到資料可以找找performHapticFeedback或HapticFeedback這個關鍵字的資料看看。
android:id 給當前View設置一個在當前layout.xml中的唯一編號,可以通過調用View.findViewById() 或Activity.findViewById()根據這個編號查找到對應的View。不同的layout.xml之間定義相同的id不會衝突。格式如”@+id/btnName”
android:isScrollContainer 設置當前View爲滾動容器。這裏沒有測試出效果來,ListView/ GridView/ ScrollView根本就不用設置這個屬性,而EdidText設置android:scrollbars也能出滾動條。
android:keepScreenOn View在可見的情況下是否保持喚醒狀態。