핀치 투 줌(Pinch-To-Zoom) 라이브러리

이미지를 표기하는 앱에 있어서 가장 중요한 것 중 하나라고 한다면, 이미지 화질이나 캐시같은 문제도 있겠지만 개인적으로는 핀치투줌 기능을 넣는 것이라 본다. (시코 모바일 V1에서는 이 기능을 귀찮아서 안넣었다가 필요성을 절실하게 깨닫고 V2에는 집어넣었다.) 헌데 안드로이드 쪽은 이 기능을 구현하기 위해서 쓰는 방법이 널리 알려진 안드로이드 1.5시절 소스를 가져다 쓰는 것인데, 이럴 필요 없이 이걸 아주 간단한 방법으로 해결해 주는 라이브러리를 찾았다.

https://github.com/chrisbanes/PhotoView

특이한게 이미지뷰는 그대로 가져다 쓰면 되고, 건드려야하는 것은 이 라이브러리에서 제공하는 PhotoViewAttacher 클래스.

ImageView mImageView;  
PhotoViewAttacher mAttacher;

@Override
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Any implementation of ImageView can be used!
    mImageView = (ImageView) findViewById(R.id.iv_photo);

    // Set the Drawable displayed
    Drawable bitmap = getResources().getDrawable(R.drawable.wallpaper);
    mImageView.setImageDrawable(bitmap);

    // Attach a PhotoViewAttacher, which takes care of all of the zooming functionality.
    mAttacher = new PhotoViewAttacher(mImageView);
}

// If you later call mImageView.setImageDrawable/setImageBitmap/setImageResource/etc then you just need to call
attacher.update();  

위의 방법대로 사용하면 된다. 굳이 소스 복사 붙여넣기 해서 할 필요 없고, 위와 같이 PhotoViewAttacher 클래스를 선언하고 update() 메소드를 한번 실행해주면 자동으로 알아서 핀치투줌 기능을 구현해준다. 핀치투줌 이외에도 더블클릭시 2단계의 확대를 지원하니 상당히 편리한 라이브러리라 볼 수 있겠다.

아직까지 이것보다 편리한 방법의 핀치투줌 라이브러리는 찾지 못한것 같다. 강력 추천하는 바이다.

By | 2016-04-27T01:05:52+00:00 2013-07-13|Development|9 Comments

About the Author:

프로그래밍을 좋아하는 건축공학도입니다. 블로그는 프로그래밍과 IT쪽으로 현재 운영중이지만 앞으로 건축관련 내용도 다뤄보려고 합니다. 원래 Android 및 Java를 주력으로 다뤘지만 최근에는 개인 프로젝트로 인하여 C#을 주력으로 다루고 있습니다.

9 Comments

  1. 흰구름 2013/11/08 at 오후 4:06 - Reply

    고맙다고 생각하는 바이다.

  2. 지니다이스 2013/11/13 at 오전 6:36 - Reply

    써보니 정말 좋다고 생각하는 바이다

  3. 일단 한 대 맞아~ 2014/05/13 at 오전 1:54 - Reply

    나는 정글 바이다.

  4. 바이퍼 2014/05/22 at 오전 11:39 - Reply

    그렇다 잘된다 고맙다

  5. 김효묵 2014/07/04 at 오후 3:21 - Reply

    이거 메이븐 프로젝트 인것 같은데 기존 프로젝트에 어떻게 라이브러리 추가하면 될까요 ㅠㅠ

    • AlphaFactory 2014/07/04 at 오후 3:51

      메이븐 프로젝트는 아니고… 제작자가 Eclipse에서 Android Studio(IntelliJ 기반)으로 갈아탄 거 같은데, library / src / main / java / uk / co / senab / photoview / 로 가셔서 java소스 모두 다운받으신 후 프로젝트에 붙여넣기 하시는 방법이 좋지 않을까 합니다. res폴더는 없으므로 java 파일 그대로 붙여넣기 해도 될것 같습니다.

      붙여넣으신 다음에는 package 경로 수정하시는 정도의 수고만 들이시면 충분히 사용 가능할 것 같습니다.

  6. 이동섭 2016/05/23 at 오후 10:27 - Reply

    attacher.update(); 에러…

    • AlphaFactory 2016/05/23 at 오후 11:21

      attacher.update();는 함수나 버튼 이벤트 등에서 사용해야 합니다.
      위의 소스코드는 예시일 뿐입니다.

      예를 들자면 onResume()에서 실행시킬 수도 있겠네요.

  7. 넷째형 2016/08/23 at 오후 12:36 - Reply

    setImageDrawable로 설정한 이미지랑 커스텀 이미지뷰에서 canvas에 그린것도 이걸로 같이 확대가 가능할까요??

Leave A Comment

%d 블로거가 이것을 좋아합니다: