Glide가 PhotoView와 함께 사용될 경우 이미지 확대/축소 시 너비 및 높이 문제 해결 레코드 표시(새 업데이트)
8470 단어 androidphotoviewPhotoView+Gilde
잠시 멍하니 있다가 원인을 곰곰이 생각해 보았다.아마도 포토뷰를 초기화할 때 측정한 그림의 폭이 높아서 문제가 생겼을 것이다. 그렇다면 어떤 원인이 있었을까?이리저리 찾아보니 점위도 크기와 인터넷에서 다운로드한 그림의 크기가 일치하지 않기 때문이다.그림을 다운로드하는 데 일정한 시간이 걸리기 때문에 인터넷 사진이 다운로드되지 않았을 때 포토뷰 애처쳐를 초기화하고 그림의 넓이를 측정했기 때문이다. 그러나 그림을 불러온 후에 포토뷰는 인터넷에서 다운로드한 그림을 나타냈지만 초기화할 때 이미 측정된 것은 비트맵의 넓이이기 때문에 그림의 축소에 문제가 존재한다.
다운로드할 네트워크 그림의 넓이와 높이가 고정되어 있다면, 같은 크기의 점위도를 설정할 수 있어 문제가 해결되었다.그러나 일반적인 상황에서 인터넷 사진은 확실하지 않기 때문에 이런 방법은 합리적이지 않다.우리는 두 가지 처리 방법이 있다(두 번째 방법을 권장한다).
첫 번째 방법: 비트맵에 대한 요구가 있어도 되고 없어도 된다면 Glide 비트맵 설정을 주석해 버릴 수 있다.(인터넷 그림을 불러오지 않았을 때 포토뷰는 빈 그림이다).
Glide.with(this)
.load(url)
/*.placeholder(R.mipmap.ic_default_man)*/
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.into(iv_photo);
XML 레이아웃 파일에서 PhotoView의 부모 컨트롤은 Relativelayout이어야 하며 Linerlayout을 사용하면 측정된 PhotoView의 폭이 0으로 커집니다.
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<uk.co.senab.photoview.PhotoView
android:id="@+id/iv_photo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter"/>
</RelativeLayout>
두 번째 방법: Glide에 다운로드 진도 감청을 설정하고 인터넷 사진 다운로드가 완료된 후에 PhotoView Attacher를 초기화합니다.
코드는 다음과 같습니다.
Glide.with(this)
.load(url)
.placeholder(R.mipmap.ic_default_man) //
.diskCacheStrategy(DiskCacheStrategy.RESULT)//
.listener(new RequestListener() {
@Override
public boolean onException(Exception e, Object model, Target target, boolean isFirstResource) {
Toast.makeText(PhotoViewActivity.this,
" , ", Toast.LENGTH_SHORT).show();
return false;
}
@Override
public boolean onResourceReady(Object resource, Object model, Target target, boolean isFromMemoryCache, boolean isFirstResource) {
//
// The MAGIC happens here!
mAttacher = new PhotoViewAttacher(iv_photo);
// Lets attach some listeners, not required though!
mAttacher.setOnMatrixChangeListener(new MatrixChangeListener());//
mAttacher.setOnPhotoTapListener(new PhotoTapListener());//
//mAttacher.setOnSingleFlingListener(new SingleFlingListener());//
return false;
}
})
.into(iv_photo);
참고로 원래 프로젝트 코드에 작은 문제가 있습니다. 데모 코드는 다음과 같습니다.
ImageView mImageView = (ImageView) findViewById(R.id.iv_photo);
ImageView는 xml 레이아웃 파일에서 사용자 정의되므로 다음과 같이 변경해야 합니다.
PhotoView mImageView = (PhotoView) findViewById(R.id.iv_photo);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.