1.1問題:ImageView no longer exists. You should not use this PhotoViewAttacher any more
這個(gè)問題是因?yàn)?removeView(PhotoView)時(shí)會(huì)調(diào)用PhotoView.onDetachedFromWindow()-->PhotoViewAttacher.cleanup()。在cleanup()方法中清空了PhotoViewAttacher持有的PhotoView,而在onAttachToWindow()方法中沒有重置。
1.2 解決方法:
使用github上面最新版本的PhotoView,最新版本的PhotoView解決了這個(gè)問題?;蛘邚?fù)寫PhotoView.onAttachToWindow()方法,在該方法內(nèi)重新生成PhotoViewAttacher實(shí)例,具體要結(jié)合代碼。
2.1 問題:PhotoView.setOnPhotoTapListener(OnPhotoTapListener)不起作用
原因:PhotoView.setOnPhotoTapListener(OnPhotoTapListener)內(nèi)部直接調(diào)用了PhotoViewAttacher.setOnPhotoTapListener(OnPhotoTapListener),依賴于PhotoView現(xiàn)在持有的PhotoViewAttacher,如果Container.removeView(PhotoView)-->Container.addView(PhotoView),這樣操作之后,PhotoView持有的PhotoViewAttacher已經(jīng)變了,而且沒有被設(shè)置OnPhotoTapListener,所以單擊不起作用。
2.2 解決方法
修改PhotoView的代碼邏輯,在重新創(chuàng)建PhotoViewAttacher的時(shí)候?yàn)槠湓O(shè)置OnPhotoTapListener:
- 改寫setOnPhotoTapListener(OnPhotoTapListener)方法
@Override
public void setOnPhotoTapListener(OnPhotoTapListener listener) {
this.mOnPhotoTapListener = listener;
mAttacher.setOnPhotoTapListener(listener);
}
- 改寫init()方法
protected void init() {
if (null == mAttacher || null == mAttacher.getImageView()) {
mAttacher = new PhotoViewAttacher(this);
}
if (null != mPendingScaleType) {
setScaleType(mPendingScaleType);
mPendingScaleType = null;
}
if (null != mOnPhotoTapListener) {
mAttacher.setOnPhotoTapListener(mOnPhotoTapListener);
}
}