Android 에 서 는 로 컬 앨범 이나 카 메 라 를 통 해 사용자 프로필 사진 인 스 턴 스 를 설정 합 니 다.
(1)로 컬 앨범 의 그림 을 가 져 와 재단 한 후 프로필 사진 으로 한다.
(2)핸드폰 카 메 라 를 작 동시 키 고 사진 을 찍 은 다음 에 재단한다.
(3)앱 에 자신 이 가지 고 있 는 이미지 자원 을 추가 하여 사용자 가 선택 할 수 있 도록 한다(인성 화 되 지 않 아 현재 잘 사용 되 지 않 는 다).
이번에 우 리 는 로 컬 앨범 과 카 메 라 를 촬영 하 는 방법 으로 프로필 사진 을 설정 하고 다음 과 같은 방향 을 실현 하 는 것 을 간단하게 소개 합 니 다.
(1)startActivity ForResult 방법 을 통 해 시스템 앨범 을 호출 하 는 Intent 와 카메라 로 사진 을 찍 는 Intent 를 각각 전달 하여 선택 합 니 다.
(2)안 드 로 이 드 시스템 에서 자체 적 으로 가 져 온 그림 편집 을 호출 하여 그림 의 편집 을 실현 하고 onActivity Result 방법 에서 데 이 터 를 가 져 옵 니 다.
이번 프 리 젠 테 이 션 효 과 는 다음 과 같 습 니 다.
간단 한 레이아웃 파일 은 더 이상 군말 하지 않 습 니 다.이번 시험 은 암시 적 인 intent 호출 카메라 와 로 컬 앨범 을 사용 합 니 다.설정 목록 에 권한 을 추가 하지 않 아 도 호출 할 수 있 습 니 다.
자바 구현 코드 는 다음 과 같 습 니 다:
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button buttonLocal, buttonCamera;
private ImageView imageView;
// ( SD )
private static final File USER_ICON = new File(Environment.getExternalStorageDirectory(), "user_icon.jpg");
// ( 、 、 )
private static final int CODE_PHOTO_REQUEST = 1;
private static final int CODE_CAMERA_REQUEST = 2;
private static final int CODE_PHOTO_CLIP = 3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonLocal = (Button) findViewById(R.id.buttonLocal);
buttonCamera = (Button) findViewById(R.id.buttonCamera);
imageView = (ImageView) findViewById(R.id.imageView);
buttonLocal.setOnClickListener(this);
buttonCamera.setOnClickListener(this);
}
//
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.buttonLocal:
//
getPicFromLocal();
break;
case R.id.buttonCamera:
//
getPicFromCamera();
break;
default:
break;
}
}
/**
*
*/
private void getPicFromLocal() {
Intent intent = new Intent();
//
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
//
// intent.setAction(Intent.ACTION_PICK);
// intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
// "image/*");
startActivityForResult(intent, CODE_PHOTO_REQUEST);
}
/**
* ,
*
*/
private void getPicFromCamera() {
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
//
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(USER_ICON));
startActivityForResult(intent, CODE_CAMERA_REQUEST);
}
/**
*
*
* @param uri
*/
private void photoClip(Uri uri) {
//
Intent intent = new Intent();
intent.setAction("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// crop=true Intent VIEW
intent.putExtra("crop", "true");
// aspectX aspectY
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
/*outputX outputY
* ,
* binder 1M
* TransactionTooLargeException
*/
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, CODE_PHOTO_CLIP);
}
/**
* , View
*/
private void setImageToHeadView(Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
imageView.setImageBitmap(photo);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// ,
if (resultCode == RESULT_CANCELED) {
Toast.makeText(MainActivity.this, " ", Toast.LENGTH_LONG).show();
return;
}
switch (requestCode) {
case CODE_CAMERA_REQUEST:
if (USER_ICON.exists()) {
photoClip(Uri.fromFile(USER_ICON));
}
break;
case CODE_PHOTO_REQUEST:
if (data != null) {
photoClip(data.getData());
}
break;
case CODE_PHOTO_CLIP:
if (data != null) {
setImageToHeadView(data);
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
여기 서 주의해 야 할 것 은 그림 을 재단 할 때 길이 와 폭 을 너무 크게 설정 하지 마 세 요.그렇지 않 으 면 binder 체제 의 캐 시 크기 제한(핸드폰 설정 의 영향 을 받 음)을 초과 하지 않 습 니 다.TransactionToo Large Exception 에 보고 하고 코드 에 상세 한 표 시 를 했 습 니 다.이 를 실현 할 때 주의 하 시기 바 랍 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.