티스토리 뷰
1. /res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/ic_launcher" />
</android.support.constraint.ConstraintLayout>
▼ 갤러리에서 가져온 사진을 표현하기 위해 ImageView 위젯 하나를 배치하였습니다. 해당 예제에서는 화면에 배치되어 있는 ImageView를 클릭하였을 때 Gallery Activity릃 실행한 뒤 사진을 선택하고 예제 앱 액티비티로 돌아왔을 때 ImageView에 해당 사진을 표현하도록 하겠습니다.
2. MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE = 0;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.image);
imageView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, REQUEST_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == REQUEST_CODE)
{
if(resultCode == RESULT_OK)
{
try{
InputStream in = getContentResolver().openInputStream(data.getData());
Bitmap img = BitmapFactory.decodeStream(in);
in.close();
imageView.setImageBitmap(img);
}catch(Exception e)
{
}
}
else if(resultCode == RESULT_CANCELED)
{
Toast.makeText(this, "사진 선택 취소", Toast.LENGTH_LONG).show();
}
}
}
}
▼ onCreate() 함수에서는 imageView가 클릭되었을 때 동작 처리를 위한 Click Listener를 생성한 뒤 setOnClickListener() 함수를 통해 생성된 리스너를 등록합니다. onClick() 함수에서는 Intent 객체를 생성하고 갤러리 액티비티 실행하기 위한 정보를 Setting합니다. 갤러리 액티비티로부터 가져온 결과 데이터를 처리하기 위해 StartActivityForResult() 함수를 통해 액티비티를 실행해줍니다.
▼ 갤러리 액티비티로부터 결과 데이터를 처리하기 위해서는 onActivityResult() 함수를 오버라이딩합니다. 해당 함수의 인자는 3개입니다. 첫 번째 인자 RequestCode는 StartActivityForResult() 함수의 두 번째 인자로 넘겨줬던 값과 동일한 값이 넘어옵니다. 두 번째 인자는 resultCode로 사진을 정상적으로 선택하였다면 RESULT_OK 값이 넘어오며 뒤로가기 버튼으로 작업을 취소한 경우 RESULT_CANCELED 값이 넘어옵니다. 해당 코드값을 확인하여 액티비티에서 적절한 처리를 해주면됩니다. 마지막 세 번째 인자로 갤러리 액티비티로부터 넘어온 결과 데이터가 담겨있는 Intent 객체입니다.
3. 참조
■ 관련 안드로이드 공식 참조 문서
https://developer.android.com/guide/topics/providers/document-provider
■ 관련 블로그 다른 글
[Android] 안드로이드 - 명시적 인텐트(Explicit Intent)와 암시적 인텐트 (Implicit Intent)
[Android] 안드로이드 - 액티비티(Activity)로부터 결과 데이터 받아오기
'Programming > Android 개발' 카테고리의 다른 글
[Android] 안드로이드 - RecyclerView의 ViewType 구분하기 (1) | 2019.07.10 |
---|---|
[Android] 안드로이드 - 리사이클러뷰 (RecyclerView) notifyDataSetChanged 실행 시 깜빡 거리는 현상 (0) | 2019.07.09 |
[Android] 안드로이드 - 플로팅 액션 버튼(Floating Action Button) 사용법 (0) | 2019.06.24 |
[Android] 안드로이드 - Text 입력 이벤트 처리 - TextWatcher (1) | 2019.06.23 |
[Android] 안드로이드 - KeyEvent(키 이벤트) 처리 (1) | 2019.06.22 |