티스토리 뷰



안드로이드에서 사용자의 갤러리/카메라에서 사진을 단일,다중으로 가져올 수 있고, 전용 뷰어를 통해 Crop까지 가능하도록 추가하였습니다.

계속 해서 문제점과 기능들을 보강하여 관리할 예정입니다.




Android-Y-PhotoPicker

안드로이드용 이미지 선택기 입니다.

다중/단일 선택을 지원하며 기본으로 pager 이미지 뷰어를 지원합니다.

기존 Urcrop 기능을 제공했었으나, 0.0.2 이후부터 제거되었습니다.

API 

스크린샷

 

설정

1. app.gradle 에 y-photopicker 를 import 해줍니다.

  allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}
  compile 'com.github.yongbeam:Android-Y-PhotoPicker:1.0.0'


2. 프로젝트의  AndroidManifest.xml 에 아래 두개의 액티비티를 추가해줍니다. 

<activity android:name="com.yongbeam.y_photopicker.util.photopicker.PhotoPickerActivity" android:theme="@style/Theme.AppCompat.NoActionBar" /> <activity android:name="com.yongbeam.y_photopicker.util.photopicker.PhotoPagerActivity" android:theme="@style/Theme.AppCompat.NoActionBar"/>


3. y-photopicker 를 사용하기 위해선 아래 권한이 필요합니다. AndroidManifest.xml 에 아래 권한을 추가해주세요.

( y-photopicker 는 Android 6.0 이상에서 권한동의창을 띄워주고 있습니다. 별도로 처리하실 필요는 없습니다 )

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />


4. Y-PhotoPicker는 Intent 방식으로 화면을 호출하고 결과를 받습니다.

아래 옵션을 입맛에 맞게 사용하세요

setMaxSelectCount : 한번에 선택할 수 있는 최대 이미지 갯수를 지정합니다. ( 기본값 false )

setShowCamera : 카메라 버튼의 표시여부를 설정합니다( 기본값 true )

setShowGif : 이미지 선택시 gif 이미지를 포함할건지 지정합니다( gif 플레이도 이루어집니다 )

setSelectCheckBox : 사진 선택시 테두리의 색이변합니다. 이옵션을 켜면 추가로 체크박스가 보여집니다

setMaxGrideItemCount : 한줄에 몇개의 이미지가 보여질건지 설정합니다( 기본값 3 )

Intent 로 호출하고 결과를 받을때는 onActivityResult 로 받습니다 그때문에 호출시 startActivityForResult 를 사용해주세요

( 조만간 자체 콜백으로 기능이 변경될 예정입니다 )

      YPhotoPickerIntent intent = new YPhotoPickerIntent(this);
      intent.setMaxSelectCount(20);
      intent.setShowCamera(true);
      intent.setShowGif(true);
      intent.setSelectCheckBox(false);
      intent.setMaxGrideItemCount(3);
      startActivityForResult(intent, REQUEST_CODE);


5. 선택된 이미지에 대한 결과를 받이 위해서 onActivityResult 를 오버라이드 해주세요.

이미지의 경로가 Array<String> 타입으로 주도록 되어있으며, 선택한 순서가 보장됩니다.

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        List<String> photos = null;
        if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
            if (data != null) {
                photos = data.getStringArrayListExtra(PhotoPickerActivity.KEY_SELECTED_PHOTOS);
            }
        }
    }


Y-PhotoPicker 내장 이미지뷰어 사용

    // start image viewr
    Intent startActivity = new Intent(this , PhotoPagerActivity.class);
    startActivity.putStringArrayListExtra("photos" , photos);
    startActivity(startActivity);

라이센스

Copyright 2016-2018 LeeYongBeom

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.



github에서 보기


댓글
  • 이전 댓글 더보기
  • 프로필사진 비밀댓글입니다 2016.12.21 20:19
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 앱 이름이 바뀌어버리는 문제가 있는지 이제야 알았네요.. 조만간 수정토록 하겠습니다 2017.01.20 16:12 신고
  • 프로필사진 비밀댓글입니다 2017.01.24 17:55
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 요즘 바빠서 라이브러리 업데이트를 못하고 있었는데요, 2월초중으로 수정해서 업데이트 하도록 할께요^^
    혹시 더 필요한 기능 있으시면 말씀해주세요~
    2017.01.30 00:59 신고
  • 프로필사진 김준호 정말찾던 자룐데 정말 감사드립니다.~~
    궁금한점이있는데 저라이브러리에서 혹시 사진자를때 개발자가 비율설정같은거 할수있는방법이 있나요?
    배경화면에쓰려고하는데 비율없이 가져와버리면 잘려버려서 골치네용..ㅠㅠ
    2017.03.10 01:18 신고
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 안녕하세요, 피드백이 늦어서 죄송합니다.
    해당 부분을 추가기능으로 제공할지 검토해보도록 하겠습니다 :)
    2017.09.14 19:13 신고
  • 프로필사진 김가르샤 안녕하세요 만들어주신 라이브러리를 잘 사용하고 있습니다. 그런데 앱이름을 바꿔버리는 부분이 발생하여 NOTI라든지 삭제시 모든 앱이름이 y-photopicker 로 바뀌어버리네요 수정을 좀 부탁드려도 될까요 감사합니다. 2017.03.17 13:47 신고
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 안녕하세요, 피드백이 늦어서 죄송합니다.
    해당 부분은 수정하여 재배포하였습니다 :)
    2017.09.14 19:12 신고
  • 프로필사진 CDK 좋은 라이브러리 제공해주셔서 감사합니다! 2017.05.01 21:25 신고
  • 프로필사진 CDK 좋은 라이브러리 제공해주셔서 감사합니다! 2017.05.01 21:25 신고
  • 프로필사진 또치엄마 라이브러리 제공해주셔서 감사합니다. 정말 유용하게 쓰겠습니다ㅎㅎ 2017.05.17 17:33 신고
  • 프로필사진 비밀댓글입니다 2017.07.04 10:53
  • 프로필사진 비밀댓글입니다 2017.09.14 19:12
  • 프로필사진 비밀댓글입니다 2017.08.30 16:49
  • 프로필사진 비밀댓글입니다 2017.09.14 19:12
  • 프로필사진 비밀댓글입니다 2017.10.02 18:59
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 안녕하세요!
    샘플앱 보시면 onActivityResult 를통해 선택한 이미지의 경로값을 리턴해주고 있습니다
    그 경로를 이미지로더등을 통해 이미지뷰에 뿌려주시면되요~ :)
    2017.10.06 01:32 신고
  • 프로필사진 kakaofriends 혹시 sdk 버전 몇 이상부터 지원되나여? 2017.10.06 22:19 신고
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 안녕하세요~
    API 레벨 14+(Android 4.0 이상) 부터 사용하실 수 있습니다.
    2017.10.09 21:22 신고
  • 프로필사진 donaition 컴파일 버젼이 26이어야 되는것 같네요 저는 25인데
    Error:(15, 21) No resource found that matches the given name: attr 'android:keyboardNavigationCluster'.
    라는 오류가 뜹니다.
    2017.10.11 15:00 신고
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 네, compileSdkVersion 은 26 을 사용하셔야 합니다.
    라이브러리 자체는 최소 14부터 사용하실 수 있습니다.

    compileSdkVersion 를 25로 낮추셔야 하는경우 프로젝트 자체를 fork하셔서 작업하시면 됩니다 :)
    2017.10.17 11:19 신고
  • 프로필사진 넷째형 컴파일 버젼을 26으로 해야한다는 댓글을보고 26으로했더니 appcompat에서 빨간줄이 뜨는데 이런건 어떻게 해결 해야하는지 알 수 있을까요? 2017.10.20 16:54 신고
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 자세한 가이드는 샘플코드를 보시면 알 수 있습니다.
    혹은 오류내용을 알려주시면 확인해보도록 할께요
    2017.10.31 11:07 신고
  • 프로필사진 포카리 그래들로 컴파일 주소 적어주면 파일을 못찾는데 저만 그런건가요?
    0.0.1 버전을 쓰고 있었는데 앱 이름 바뀌는 문제 때문에 0.0.5버전으로 바꿧는데 컴파일이 계속 실패하네요 파일을 못찾는다는데 어떤 이유에서 인지 알수 있을까요
    2017.11.03 10:23 신고
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 포카리님 안녕하세요!
    0.0.1 이후 버전부터는 https://jitpack.io 로 배포 저장소를 이전하였습니다

    maven { url 'https://jitpack.io'}
    를 repositories 에 추가해주시고,

    compile 'com.github.yongbeam:Android-Y-PhotoPicker:0.0.5'

    위처럼 불러와주시면 됩니다.
    변경된 사항에 대해 따로 고지하지 못해 죄송합니다ㅠㅠ..

    글 본문은 새로운 저장소 기준으로 수정되어 있으니 참고해주세요 :)
    2017.11.03 15:31 신고
  • 프로필사진 비밀댓글입니다 2017.11.16 17:32
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 안녕하세요!
    이미지를 선택하시면 아래와 같이 콜백을 받아서 처리하는데요,
    이 부분 콜백 받는 부분에서 이미지 크롭을 처리하시면 될것같습니다.
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    List<String> photos = null;
    if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
    if (data != null) {
    photos = data.getStringArrayListExtra(PhotoPickerActivity.KEY_SELECTED_PHOTOS);
    }
    }
    }


    만약, 이미지 선택기 내에서 크롭을 처리하시고 싶으시면 이미지 선택하는 화면에서 별도 편집 버튼을 만드시거나 하시면 될것같습니다.
    이미지 선택하는 화면에서 선택된 이미지 경로에 대한 정보를 바로 얻으실 수 있기 때문에 어렵지 않게 커스마이징 가능하실거라 생각됩니다.

    초기 버전에는 Urcrop 를 내장하고 있었으나, 일부 직접 구현하시는 분들이 있어 선택사항으로 현재는 제거되어 배포되고 있습니다.
    차후 가장 기본적인 크롭기능은 제공할 수 있도록 고려해보겠습니다.
    2017.11.16 17:42 신고
  • 프로필사진 트래져 maven { url 'https://jitpack.io'} 를 입력했는데도 파일을 못찾아요... 2017.12.02 19:39 신고
  • 프로필사진 비밀댓글입니다 2017.11.16 17:55
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 라이브러리 자체를 수정하시려면 프로젝트를 fork 하셔서 빌드하셔야 합니다.

    선택기 내에서의 이미지 경로를 얻어오시려면
    PhotoPickerActivity 에서 아래 코드를 호출하시면 현재 선택된 이미지들을 ArrayList<String> 형태로 얻을 수 있습니다.

    pickerFragment.getPhotoGridAdapter().getSelectedPhotoPaths()

    시간될때 선택기 내에 액션버튼을 추가할 수 있는 옵션과 클릭했을때 이미지경로를 반환해주는 콜백을 하나 만들 수 있도록 고려해보겠습니다.
    2017.11.16 18:01 신고
  • 프로필사진 비밀댓글입니다 2017.12.02 20:11
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 다른 라이브러리와 충돌을 확인하시고 의존성 옵션을 걸어주시면 됩니다.
    이렇게 봐서는 정확히 어떤 부분이 문제인지는 확인이 안되네요

    샘플앱을 참고해보세요 :)
    2017.12.06 17:27 신고
  • 프로필사진 비밀댓글입니다 2018.05.14 12:40
  • 프로필사진 비밀댓글입니다 2018.05.18 17:35
  • 프로필사진 q 받아올때 photo.get(1), photo.get(2) 이런식으로 받아와서, 아래와같이 받고 있습니다.
    그런데 3장을 받을 수 있게 한뒤, 한장, 혹은 두장만 받으면 에러가 뜹니다. isempty나 eqaul을 써도 해결이 안되서 그러는데
    조언 주시면 감사하겠습니다.
    <받아오기>
    img1.setImageURI(Uri.parse(photo.get(0)));

    if(!photo.get(1).isEmpty()){
    img2.setImageURI(Uri.parse(photo.get(1)));
    }else{

    }
    if(!photo.get(2).equals("";)){
    img3.setImageURI(Uri.parse(photo.get(2)));
    }
    2018.06.27 14:55 신고
  • 프로필사진 BlogIcon 이용범 Lee Yongbeom 갯수가 3개란걸 보장할 수 없다면 index 의 위치를 직접 지정하시면 안됩니다.
    반복문을 돌려 이미지를 추출하시면 됩니다.

    isEmpty 는 값이 있나 없나를 체크하는거지 없는 index 의 값까진 체크할 순 없어요
    2018.06.28 14:17 신고
  • 프로필사진 송상근 소스 정말 유용할것 같아 설치를 했는데 현재 갤럭시 S8에선 안드로이드 8.0은 잘됩니다. 그런데 S9 플러스 안드로이드 8.0 에선 아래 처럼 에러가 나는데요 이걸 해결해야할 방법을 몰라서... 제가 아직 많은 지식을 습득하지 못하다 보니...

    현재 S8도 안드로이드 8.0인데 단지 기기의 문제인지...

    답변 부탁드립니다.


    스팸방지 패튼에 의해 소스를 올리지를 못하겠네요.

    아래 주소로 파일올려 드렸습니다.

    http://itprogress.co.kr/Y-PhotoPicker_error.txt

    꼭 확인 부탁드립니다.

    2018.09.29 11:11 신고
댓글쓰기 폼