Android從相簿中選擇圖片並作為Activity的背景(主題)
阿新 • • 發佈:2019-01-26
實現邏輯:
- 首先獲取本地相簿圖片的絕對路徑URL,儲存;
- 通過圖片的絕對路徑轉成bitmap;
- 設背景,結束。
許可權:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT);
getAlbum.setType(IMAGE_TYPE);
startActivityForResult(getAlbum, IMAGE_CODE);
重寫onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) { // 此處的 RESULT_OK 是系統自定義得一個常量
Log.e("TAG->onresult", "ActivityResult resultCode error");
return;
}
ContentResolver resolver = getContentResolver();
if (requestCode == IMAGE_CODE) {
try {
Uri originalUri = data.getData(); // 獲得圖片的uri
MediaStore.Images.Media.getBitmap(resolver, originalUri);
String[] proj = { MediaStore.Images.Media.DATA };
@SuppressWarnings("deprecation" )
Cursor cursor = managedQuery(originalUri, proj, null, null,
null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
SharedPreferences preferences = getSharedPreferences("PATH",
Context.MODE_PRIVATE);
Editor editor = preferences.edit();
editor.putString("path", path.trim());
editor.commit();
Toast.makeText(getApplicationContext(), "修改成功,重啟應用方可生效!",
Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Log.e("TAG-->Error", e.toString());
}
}
super.onActivityResult(requestCode, resultCode, data);
}
設背景程式碼
private void setBackground() {
new Thread(new Runnable() {
public void run() {
SharedPreferences preferences = getSharedPreferences("PATH",
Context.MODE_PRIVATE);
String path = preferences.getString("path", "");
File file = new File(path);
if (file.exists()) {
Bitmap bitmap = BitmapFactory.decodeFile(path);
Resources resources = getResources();
BitmapDrawable drawable = new BitmapDrawable(resources,
bitmap);
handler.sendMessage(handler.obtainMessage(7, drawable));
} else {
Resources resources = getResources();
Drawable btnDrawable = resources
.getDrawable(R.drawable.background_1);
handler.sendMessage(handler.obtainMessage(7, btnDrawable));
}
}
}).start();
}
handler 7:
linear_background.setBackgroundDrawable((Drawable) msg.obj);