




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】如何解決Android調(diào)用系統(tǒng)圖片裁剪限定尺寸及7.0照相問(wèn)題
在下給大家分享一下如何解決Android調(diào)用系統(tǒng)圖片裁剪限定尺寸及7.0照相問(wèn)題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!本文實(shí)例為大家分享了Android調(diào)用系統(tǒng)圖片裁剪限定尺寸及7.0照相問(wèn)題的解決方法,具體內(nèi)容如下內(nèi)容:手機(jī)系統(tǒng)的裁剪介紹,7.0調(diào)用相機(jī)崩潰解決代碼如下:<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.leixiansheng.cutphoto.MainActivity">
<Button
android:id="@+id/btn_select_from_local"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="cut"/>
<ImageView
android:id="@+id/iv_local"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>java:package
com.example.leixiansheng.cutphoto;
import
android.Manifest;
import
android.annotation.SuppressLint;
import
android.content.Intent;
import
android.content.pm.PackageManager;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
.Uri;
import
android.os.Environment;
import
android.os.StrictMode;
import
vider.MediaStore;
import
android.support.annotation.NonNull;
import
android.support.v4.app.ActivityCompat;
import
android.support.v4.content.ContextCompat;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.util.Log;
import
android.view.View;
import
android.widget.Button;
import
android.widget.ImageView;
import
android.widget.Toast;
import
java.io.FileNotFoundException;
import
java.util.ArrayList;
import
java.util.List;
import
butterknife.BindView;
import
butterknife.ButterKnife;
import
butterknife.OnClick;
public
class
MainActivity
extends
AppCompatActivity
{
@BindView(R.id.btn_select_from_local)
Button
mBtnSelectFromLocal;
@BindView(R.id.btn_take_photo)
Button
mBtnTake;
@BindView(R.id.iv_local)
ImageView
mIvLocal;
private
static
final
String
TAG
=
MainActivity.class.getSimpleName();
private
static
final
String
IMAGE_FILE_LOCATION
=
"file:///"
+
Environment.getExternalStorageDirectory().getPath()
+
"/temp.jpg";
private
static
final
int
CHOOSE_PICTURE
=
1;
private
static
final
int
CROP_PICTURE
=
2;
private
static
final
int
REQUEST_CODE_OK
=
3;
private
static
final
int
TAKE_PHOTO
=
4;
private
Uri
imageUri
=
Uri.parse(IMAGE_FILE_LOCATION);
private
PermissionListener
mListener;
@SuppressLint("NewApi")
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//
android
7.0系統(tǒng)解決拍照的問(wèn)題
StrictMode.VmPolicy.Builder
builder
=
new
StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
}
@OnClick({R.id.btn_select_from_local,
R.id.btn_take_photo})
public
void
onClick(final
View
view)
{
requestRunTimePermission(new
String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA},
new
PermissionListener()
{
@Override
public
void
onGranted()
{
switch
(view.getId())
{
case
R.id.btn_select_from_local:
selectFromLocal();
break;
case
R.id.btn_take_photo:
takePhoto();
break;
}
}
@Override
public
void
onDenied(List<String>
deniedPermission)
{
Toast.makeText(MainActivity.this,
"權(quán)限不足",
Toast.LENGTH_SHORT).show();
}
});
}
/**
*
啟動(dòng)系相機(jī)
*/
private
void
takePhoto()
{
Intent
intent
=
new
Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT,
imageUri);
//啟動(dòng)相機(jī)(帶返回結(jié)果)
startActivityForResult(intent,
TAKE_PHOTO);
}
/**
*
啟動(dòng)系統(tǒng)圖片選擇
*/
private
void
selectFromLocal()
{
Intent
intent
=
new
Intent(Intent.ACTION_PICK,
null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
//返回?cái)?shù)據(jù)為被選照片的Uri
startActivityForResult(intent,
CHOOSE_PICTURE);
}
@Override
protected
void
onActivityResult(int
requestCode,
int
resultCode,
Intent
data)
{
super.onActivityResult(requestCode,
resultCode,
data);
Log.d(TAG,
resultCode
+
"");
if
(resultCode
==
RESULT_OK)
{
switch
(requestCode)
{
case
CHOOSE_PICTURE:
startPhotoZoom(data.getData());
break;
case
CROP_PICTURE:
//
取得裁剪后的圖片
try
{
mIvLocal.setImageBitmap(BitmapFactory.decodeStream(
getContentResolver().openInputStream(imageUri)
));
}
catch
(FileNotFoundException
e)
{
e.printStackTrace();
}
break;
case
TAKE_PHOTO:
startPhotoZoom(imageUri);
break;
default:
break;
}
}
}
/**
*
設(shè)置裁剪參數(shù),開(kāi)始裁剪
*
@param
uri
*/
public
void
startPhotoZoom(Uri
uri)
{
Intent
intent
=
new
Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri,
"image/*");
//
下面這個(gè)crop=true是設(shè)置在開(kāi)啟的Intent中設(shè)置顯示的VIEW可裁剪
intent.putExtra("crop",
"true");
intent.putExtra("scale",
true);
intent.putExtra("aspectX",
2);
//裁剪框
X
比值
intent.putExtra("aspectY",
1);
//裁剪框
Y
比值
intent.putExtra("outputX",
600);
//裁剪后輸出寬度
intent.putExtra("outputY",
300);
//裁剪后輸出高度
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,
CROP_PICTURE);
}
/**
*
動(dòng)態(tài)權(quán)限請(qǐng)求
*
*
@param
permissions
*/
public
void
requestRunTimePermission(String[]
permissions,
PermissionListener
listener)
{
mListener
=
listener;
List<String>
permissionList
=
new
ArrayList<>();
for
(String
permission
:
permissions)
{
if
(ContextCompat.checkSelfPermission(this,
permission)
!=
PackageManager.PERMISSION_GRANTED)
{//檢測(cè)當(dāng)前權(quán)限是否已經(jīng)被允許
permissionList.add(permission);//沒(méi)有則添加進(jìn)集合
}
}
if
(!permissionList.isEmpty())
{//檢測(cè)權(quán)限集合中是否有未申請(qǐng)的權(quán)限
ActivityCompat.requestPermissions(this,
permissionList.toArray(new
String[permissionList.size()]),
REQUEST_CODE_OK);
}
else
{
//所有權(quán)限都通過(guò)了
mListener.onGranted();
}
}
@Override
public
void
onRequestPermissionsResult(int
req
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職管理學(xué)與服務(wù)通關(guān)題庫(kù)(附帶答案)
- 2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識(shí)強(qiáng)化訓(xùn)練試卷A卷附答案
- 模擬卷浙江寧波2025屆高三一模語(yǔ)文試題及答案
- (一模)哈三中2025屆高三第一次模擬考試 語(yǔ)文試題(含答案)
- 公司管理理念宣傳手冊(cè)(講座內(nèi)容)
- 中學(xué)生讀書(shū)勵(lì)志征文
- 化工圖標(biāo)知識(shí)培訓(xùn)課件
- 酒店經(jīng)營(yíng)特許合同
- 一站式居民服務(wù)解決方案協(xié)議
- 古詩(shī)文背景知識(shí)的教學(xué)策略
- 機(jī)器人操作系統(tǒng)(ROS)課件 10 ROS 機(jī)器人仿真實(shí)驗(yàn)
- 寧德新能源verify測(cè)試題庫(kù)
- 中國(guó)兒童呼吸道合胞病毒感染診療及預(yù)防指南(2024)解讀
- 本科畢業(yè)生登記表自我鑒定范文(8篇)
- 腦梗塞的急救護(hù)理
- 讀后續(xù)寫+摯友離別:不舍與成長(zhǎng)交織的瞬間+講義 高一上學(xué)期期中聯(lián)考英語(yǔ)試題
- 2024-2030年中國(guó)飾面板行業(yè)發(fā)展?fàn)顩r及前景趨勢(shì)研究報(bào)告
- 春季傳染病預(yù)防課件動(dòng)態(tài)課件
- 山東省2024年夏季普通高中學(xué)業(yè)水平合格考試地理試題02(解析版)
- 2024智慧城市數(shù)據(jù)分類標(biāo)準(zhǔn)規(guī)范
- 礦山挖機(jī)合作協(xié)議書(shū)范文
評(píng)論
0/150
提交評(píng)論