前言
魅族手機調用系統圖片剪切功能的問題。
聲明
歡迎轉載,但請保留文章原始出處:)
博客園:http://www.cnblogs.com
農民伯伯: http://over140.cnblogs.com
系列
1、【Andorid X 項目筆記】禁用ListView的Fling功能(1)
2、【Andorid X 項目筆記】動態設置ViewPager的Adapter問題(2)
3、 【Andorid X 項目筆記】TextView字幕效果(3)
正文
一、調用圖片剪切的代碼
/**
* 用於截取大圖
*
* @param ctx
* @param uri
* @param outputX
* @param outputY
* @param requestCode
*/
public static void cropImageUri(Activity ctx, Uri uri, int outputX, int outputY, int requestCode, boolean scale) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
intent.putExtra("crop", "true"); // 發送裁剪信號
intent.putExtra("outputX", outputX); // 裁剪區的寬
intent.putExtra("outputY", outputY); // 裁剪區的高
intent.putExtra("aspectX", 1); // X方向上的比例
intent.putExtra("aspectY", 1); // Y方向上的比例
intent.putExtra("scale", scale); // 是否保留比例
// intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); // 直接輸出文件
intent.putExtra("return-data", true); // 是否返回數據
// intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // 關閉人臉檢測
ctx.startActivityForResult(intent, requestCode);
}
* 用於截取大圖
*
* @param ctx
* @param uri
* @param outputX
* @param outputY
* @param requestCode
*/
public static void cropImageUri(Activity ctx, Uri uri, int outputX, int outputY, int requestCode, boolean scale) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
intent.putExtra("crop", "true"); // 發送裁剪信號
intent.putExtra("outputX", outputX); // 裁剪區的寬
intent.putExtra("outputY", outputY); // 裁剪區的高
intent.putExtra("aspectX", 1); // X方向上的比例
intent.putExtra("aspectY", 1); // Y方向上的比例
intent.putExtra("scale", scale); // 是否保留比例
// intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); // 直接輸出文件
intent.putExtra("return-data", true); // 是否返回數據
// intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // 關閉人臉檢測
ctx.startActivityForResult(intent, requestCode);
}
二、問題
參照魅族官方論壇帖子:com.android.camera.action.CROP照片剪輯的問題
具體表現為剪切完成后在onActivityResult 中取不到data數據。其他機器目前沒有發現這樣的問題
三、解決辦法
mPhoto = extras.getParcelable("data");
if (mPhoto == null) {
String filePath = extras.getString("filePath");
if (!StringUtils.isEmpty(filePath))
mPhoto = ImageUtils.decodeSampledBitmapFromFile(filePath, 400, 600);
}
if (mPhoto == null) {
String filePath = extras.getString("filePath");
if (!StringUtils.isEmpty(filePath))
mPhoto = ImageUtils.decodeSampledBitmapFromFile(filePath, 400, 600);
}
代碼說明:
雖然魅族的機器沒有返回data字段,但是返回了filePath,是相冊選中地址的路徑,可以把這個圖片按尺寸獲取一下。注意可能丟失剪切效果,目前暫時這樣處理的。