728x90
안녕하세요 이번 포스팅에서는 아래 영상과 같이 ImagePicker 라이브러리를 활용하여 간단하게 카메라나 갤러리에서 가져온 이미지를 원하는 부분만 자르거나 회전, 확대/축소하는 기능을 구현하려 합니다.
라이브러리에 대한 상세한 설명과 더 많은 기능들은
https://github.com/Dhaval2404/ImagePicker 에서 확인할 수 있습니다.
우선 Gradle에 다음과 같이 라이브러리를 추가합니다.
settings.gradle
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven { url "https://jitpack.io" }
}
}
build.gradle (:app)
dependencies {
implementation 'com.github.dhaval2404:imagepicker:2.1'
}
그 다음 원하는 기능에 맞추어 레이아웃을 생성합니다.
여기서는 간단하게 이미지가 보여질 ImageView 하나, ImagePicker를 활성화 시키는 버튼 하나로 디자인했습니다.
ImageView의 android:src = "@drawable/photo"의 경우 카메라/갤러리에서 이미지를 가져오기 전에 ImageView에 보여주기 위한 기본이미지로, 제가 drawable 폴더에 photo라는 이름으로 저장한 별개의 이미지입니다.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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"
android:background="@color/gray"
tools:context=".MainActivity">
<ImageView
android:id="@+id/imageView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="100dp"
android:layout_marginTop="80dp"
android:layout_marginEnd="100dp"
android:layout_marginBottom="30dp"
android:cropToPadding="false"
android:scaleType="centerCrop"
app:layout_constraintBottom_toTopOf="@+id/choose_image"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:src = "@drawable/photo" />
<Button
android:id="@+id/choose_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="250dp"
android:text="이미지 선택"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.example.imagepicker;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import com.github.dhaval2404.imagepicker.ImagePicker;
public class MainActivity extends AppCompatActivity {
ImageView imageView;
Button choose_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageView);
choose_btn = (Button) findViewById(R.id.choose_image);
// 이미지 선택 버튼 클릭 시 ImagePicker 활성화
choose_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ImagePicker.with(MainActivity.this)
// .crop(16f, 9f)와 같이 이미지 자르는 사각형의 크기 지정 가능.
// ()안에 값이 없으면 유저가 직접 크기 선택
.crop()
// 이미지 크기 지정
.compress(1024)
// 최대 가로세로 크기 지정
.maxResultSize(1080, 1080)
.start();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
Uri pictureUri;
// 카메라/갤러리에서 가져온 이미지의 Uri
pictureUri = data.getData();
// Uri를 활용하여 ImageView에 가져온 이미지 표시
imageView.setImageURI(pictureUri);
}
catch (NullPointerException e) {
e.printStackTrace();
}
}
}
'안드로이드 자바' 카테고리의 다른 글
[Java][Android] ItemDecoration으로 RecyclerView의 여백 설정하기 (0) | 2022.11.26 |
---|---|
[Java][Android] 화면 회전(가로, 세로 모드) 막기 (0) | 2022.11.25 |
[Java][Android] SimpleRatingBar 사용하기 (0) | 2022.11.12 |
[Java][Android] DatePickerDialog 에서 선택가능한 날짜 범위 지정하기 (0) | 2022.11.11 |
[Java][Android] 간단한 룰렛(원판 돌리기) 만들기 (4) | 2022.11.10 |