android imageview 圖片不能正常顯示 或不能自適應的解決方法
起因:
是由於最近在本地pc搭建伺服器,把安卓圖片傳到電腦進行處理,然後在把處理資訊發回來。
但在設定圖片的時候折騰了好久。問題如下:
1 取到圖片了,但是返回的是縮圖,沒有放大顯示在手機螢幕上
2 設定了獲取螢幕的寬度,用於重新設定圖片的寬高,但是發現圖片只是進行簡單的拉伸放大3 拉伸或剪下後圖片很模糊
後來在google找了很久也沒有解決問題,最後還是解決了問題。
話不多說,直接上圖:
之前的圖片: 現在的圖片:
是不是放大了,而且很清晰。
好了,接下來就是重點了:
首先是通過這段來到相簿:
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
image_Uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"workupload.jpg"));
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_Uri);
startActivityForResult(cameraIntent, camera_code);
然後在 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
//判斷是否是選擇照片的請求
if(requestCode == gallery_code)
{
if(intent != null)
{
Uri uri = intent.getData();
//還回的結果是一個遊標
Cursor cursor = getContentResolver().query(uri,null,null,null,null);
cursor.moveToFirst();
//拿索引 路徑
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
//string
photo_url = cursor.getString(idx);
//關閉索引
cursor.close();
//通過路徑獲得圖片 並進行壓縮
resizePhoto();
show_img_view.setImageBitmap(mPhotoImg_bitmap);
}
}
}
為了防止圖片過大,對圖片進行壓縮(這是在慕課上看到的,不過不壓縮的話,有些圖片確實會崩潰掉):
private void resizePhoto()
{
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
//不會載入,只會獲取圖片的一個尺寸
//options裡面儲存了圖片的高度和寬度
//讀取檔案
BitmapFactory.decodeFile(photo_url ,options);
//改變圖片的大小
double ratio = Math.max(options.outWidth *1.0d/1024f,options.outHeight *1.0d/1024);
options.inSampleSize =(int) Math.ceil(ratio);
//設定後會載入圖片
options.inJustDecodeBounds = false;
//圖片壓縮完成
mPhotoImg_bitmap = BitmapFactory.decodeFile(photo_url ,options);
}
接下來如何放大圖片進行顯示呢?
其實 imageView本身沒有大小之分,只是圖片多大,它就多大,圖片撐的。
所以我們可以通過一個屬性:
Android:adjustViewBounds="true" ,進行調節,小圖可以放大,但是大圖就完了
為了照顧大圖不至於碾壓螢幕,還要配合 :
android:maxHeight ="460dp"
android:maxWidth="360dp"
防止大圖太大。當然還有一定是 wrap_content也要注意。
android:layout_width="wrap_content"
android:layout_height="wrap_content"
好了,就這樣。最後再來一張圖:
希望能幫助到你,轉載請註明出處。
另附 ImageView屬性說明:
1、類概述
顯示任意影象,例如圖示。ImageView類可以載入各種來源的圖片(如資源或圖片庫),需要計算影象的尺寸,比便它可以在其他佈局中使用,並提供例如縮放和著色(渲染)各種顯示選項。
2、XML屬性
屬性名稱 |
描述 |
||||||||||||||||||||||||||
android:adjustViewBounds |
是否保持寬高比。需要與maxWidth、MaxHeight一起使用,否則單獨使用沒有效果。 |
||||||||||||||||||||||||||
android:cropToPadding |
是否擷取指定區域用空白代替。單獨設定無效果,需要與scrollY一起使用,效果如下,實現程式碼見程式碼部分:
|
||||||||||||||||||||||||||
android:maxHeight |
設定View的最大高度,單獨使用無效,需要與setAdjustViewBounds一起使用。如果想設定圖片固定大小,又想保持圖片寬高比,需要如下設定: 1) 設定setAdjustViewBounds為true; 2) 設定maxWidth、MaxHeight; 3) 設定設定layout_width和layout_height為wrap_content。 |
||||||||||||||||||||||||||
android:maxWidth |
設定View的最大寬度。同上。 |
||||||||||||||||||||||||||
android:scaleType |
設定圖片的填充方式。
|
||||||||||||||||||||||||||
android:src |
設定View的drawable(如圖片,也可以是顏色,但是需要指定View的大小) |
||||||||||||||||||||||||||
android:tint |
將圖片渲染成指定的顏色。見下圖: 左邊為原圖,右邊為設定後的效果,見後面程式碼。 |