說(shuō)明:在文件管理器中准夷,可以使用這個(gè)app來(lái)打開(kāi)圖片
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ViewImageAty"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView"
android:adjustViewBounds="true"
android:scaleType="fitCenter" />
</LinearLayout>
ImageView 常用的一些XML屬性和方法:
XML 屬性 | 相關(guān)方法 | 說(shuō)明 |
---|---|---|
adjustViewBounds | setAdjustViewBounds | 是否調(diào)整自己的邊界,保持顯示圖片的長(zhǎng)寬比 |
cropToPadding | setCropToPadding(boolean) | 是否剪裁到保留該 ImageView 的 padding |
maxWidth | setMaxWidth(int) | 設(shè)置最大寬度 |
maHeight | setMaxHeight(int) | 設(shè)置最大高度 |
scaleType | setScaleType(ImageView.ScaleType) | 顯示的圖片如何縮放與移動(dòng) |
src | setImageResource(int) | 顯示圖片的Drawable ID |
支持的scaleType 屬性:
XML 屬性 | 相關(guān)方法 |
---|---|
matrix | matrix方式縮放 |
center | 居中莺掠,不變 |
centerInside | 居中衫嵌,能完全顯示圖片 |
centerCrop | 居中,完全覆蓋 ImageView |
fitXY | 圖片橫向彻秆、縱向獨(dú)立縮放楔绞,完全適應(yīng) ImageView |
fitStart | 左對(duì)方,保持長(zhǎng)寬比的前提下圖片放最大 |
fitCenter | 居中唇兑,最大化酒朵,保持長(zhǎng)寬比 |
fitEnd | 底部最大化,保持長(zhǎng)寬比 |
參考自 《瘋狂Android講義》
如何關(guān)聯(lián)自己的app扎附,可以打開(kāi)圖片蔫耽?
在打開(kāi)圖片的Activity里需要必須設(shè)置以下三個(gè)屬性:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
可以通過(guò)設(shè)置 mimeType 來(lái)關(guān)聯(lián)對(duì)應(yīng)的類(lèi)型,比如:mimeType="vedio/*
關(guān)聯(lián)視頻格式的文件等留夜。
詳細(xì)可以參考:Android 常用 mimeType 表
設(shè)置權(quán)限
讀取圖片匙铡,需要寫(xiě)入到外部存儲(chǔ)器(SD卡)的權(quán)限:
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
如果是 API23 以上還需要?jiǎng)討B(tài)權(quán)限:
public static final int WRITE_STORAGE_PERMISSION_CODE = 1;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_image);
...
//判斷版本
if (Build.VERSION.SDK_INT >= 23) {
int permission = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
//如果權(quán)限拒絕图甜,請(qǐng)求權(quán)限
if (permission == PackageManager.PERMISSION_DENIED) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
WRITE_STORAGE_PERMISSION_CODE);
}
}
...
}
//類(lèi)似于活動(dòng)之間返回?cái)?shù)據(jù)的 onActivityResult() 方法。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
switch (requestCode) {
case WRITE_STORAGE_PERMISSION_CODE:
//判斷權(quán)限是否通過(guò)鳖眼,通過(guò)后執(zhí)行xxx操作
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
...
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
break;
}
}
自定義權(quán)限的格式:包名.permission.權(quán)限名
自定義權(quán)限需要在 Manifest 文件里使用<permission android:name="..." />
語(yǔ)法 進(jìn)行注冊(cè)黑毅。
PackageManager.PERMISSION_GRANTED
表示權(quán)限允許;PackageManager.PERMISSION_DENIED
表示權(quán)限拒絕具帮。
根據(jù)Uri獲取圖片:
private ImageView imageView;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
判斷權(quán)限...
imageView = (ImageView) findViewById(R.id.imageView);
//獲取圖片
try {
Intent intent = getIntent();
Uri uri = intent.getData();
Log.d("uri", "Path: " + uri.getPath());
imageView.setImageURI(uri);
} catch (Exception e) {
e.printStackTrace();
}
}
...