編輯:關於Android編程
在這篇文章中,我將向大家展示如何從相冊截圖。
先看看效果圖:


上一篇文章中,我就拍照截圖這一需求進行了詳細的分析,試圖讓大家了解Android本身的限制,以及我們應當采取的實現方案。大家可以回顧一下:Android實現拍照截圖功能
根據我們的分析與總結,圖片的來源有拍照和相冊,而可采取的操作有
前面我們了解到,使用Bitmap有可能會導致圖片過大,而不能返回實際大小的圖片,我將采用大圖Uri,小圖Bitmap的數據存儲方式。
我們將要使用到URI來保存拍照後的圖片:
private static final String IMAGE_FILE_LOCATION = "file:///sdcard/temp.jpg";//temp file Uri imageUri = Uri.parse(IMAGE_FILE_LOCATION);//The Uri to store the big bitmap
不難知道,我們從相冊選取圖片的Action為Intent.ACTION_GET_CONTENT。
根據我們上一篇博客的分析,我准備好了兩個實例的Intent。
一、從相冊截大圖:
Intent
intent = new
Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop",
"true");
intent.putExtra("aspectX",
2);
intent.putExtra("aspectY",
1);
intent.putExtra("outputX",
600);
intent.putExtra("outputY",
300);
intent.putExtra("scale",
true);
intent.putExtra("return-data",
false);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
imageUri);
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection",
true);
//
no face detection
startActivityForResult(intent,
CHOOSE_BIG_PICTURE);
二、從相冊截小圖
Intent
intent = new
Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop",
"true");
intent.putExtra("aspectX",
2);
intent.putExtra("aspectY",
1);
intent.putExtra("outputX",
200);
intent.putExtra("outputY",
100);
intent.putExtra("scale",
true);
intent.putExtra("return-data",
true);
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection",
true);
//
no face detection
startActivityForResult(intent,
CHOOSE_SMALL_PICTURE);
三、對應的onActivityResult可以這樣處理返回的數據
switch
(requestCode) {
case
CHOOSE_BIG_PICTURE:
Log.d(TAG,
"CHOOSE_BIG_PICTURE:
data = "
+ data);//it
seems to be null
if(imageUri
!= null){
Bitmap
bitmap = decodeUriAsBitmap(imageUri);//decode
bitmap
imageView.setImageBitmap(bitmap);
}
break;
case
CHOOSE_SMALL_PICTURE:
if(data
!= null){
Bitmap
bitmap = data.getParcelableExtra("data");
imageView.setImageBitmap(bitmap);
}else{
Log.e(TAG,
"CHOOSE_SMALL_PICTURE:
data = "
+ data);
}
break;
default:
break;
}
private
Bitmap decodeUriAsBitmap(Uri uri){
Bitmap
bitmap = null;
try
{
bitmap
= BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
}
catch
(FileNotFoundException e) {
e.printStackTrace();
return
null;
}
return
bitmap;
}
以上就是Android實現拍照截圖功能的方法,希望對大家的學習有所幫助。
Android中使用Intent在Activity之間傳遞對象(使用Serializable或者Parcelable)的方法
Android中的不同Activity之間傳遞對象,我們可以考慮采用Bundle.putSerializable(Key,Object);也可以考慮采用Bun
Android仿ViVO X6 極速閃充動畫效果
一直都在看自定義View,經過一個星期的堅持,基本上能夠寫出一些比較實用的控件效果了,今天天氣太熱,就待在家裡玩手機,然後手機沒電了,在充電的時候,看到了手機的充電動畫,
Android定制自己的EditText輕松改變底線顏色
最近做 android 項目遇到這個問題,為了保持 app 風格一致,需要將原生的EditText底線顏色改成橙色。網上搜了一些解決方案,特此記錄總結一下。效果圖默認的E
Android性能優化系列——Understanding Overdraw
過度繪制(Overdraw)是指在一幀的時間內像素被繪制了多次;理論上一個像素每次只繪制一次是最優的,但是由於層疊的布局導致一些像素會被多次繪制,而每次繪制都會對應到CP