우리가 흔히 사진에 줌 기능을 넣을 때 쓰는 라이브러리가 chrisbanes 의 PhotoView다.
https://github.com/chrisbanes/PhotoView
사용을 위해 간편하게 디펜던시에 추가하면 끝
compile 'com.commit451:PhotoView:1.2.4'
사용법도 간편하다
ImageView iv = (ImageView) findViewById(R.id.imageView);
Drawable bitmap = getResources().getDrawable(R.drawable.wallpaper);
iv.setImageDrawable(bitmap);
PhotoViewAttacher mAttacher = new PhotoViewAttacher(mImageView);
ImageView를 가지고 PhotoViewAttacher를 생성하면 된다.
하지만 더 간편한 방법이 있다.
<uk.co.senab.photoview.PhotoView
android:id="@+id/widget_photoview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:layout_gravity="center"/>
이렇게 layout에 미리 생성하면 된다.
그러면 photoview에 대한 id만 찾아서 쓰면된다.
사용법은 아래와 같다.
PhotoView photoView = (PhotoView) view.findViewById(R.id.widget_photoview);
Glide.with(context).load(url).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(photoView);
Viewpager에 PhotoView를 이용하여 슬라이드 구현을 많이 하게되는데
간혹 java.lang.IllegalArgumentException: pointerIndex out of range 에러가 떨어질 때가 있다.
구글링하여 보니 viewpager와 photoview간의 버그라고 한다.
처리방법은 viewpager를 상속받는 class를 생성한 뒤 예외처리를 하면된다.
방법은 아래와 같다.
public class CustomViewPager extends ViewPager {
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
try {
return super.onTouchEvent(ev);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
return false;
}
}
'안드로이드' 카테고리의 다른 글
Android Issue Tracker 디버깅을 쉽게 !! Fabric crashlytics (6) | 2016.06.04 |
---|---|
non-zero exit value Multidex Error (6) | 2016.03.08 |
구글맵 사용하기 (12) | 2016.02.24 |
Goolgle map api 설정 (6) | 2016.02.21 |
SHA-1 인증서 지문구하기 - The way getting the SHA1 (6) | 2016.02.21 |
댓글