我在Android应用上使用PhotoView Picasso。我想通过单击按钮来切换两个图像,保持缩放和xy坐标。我可以保持缩放,但很难保持xy坐标,因为两个图像具有不同的分辨率,我必须保持相对xy坐标 AFTER 缩放。当我切换到新图像时,如果我不保持xy坐标,则缩放图像始终位于中心。下面是我当前的代码,它只实现了保持缩放。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
// ... some basic stuffs here
mRequestCreator1 = Picasso.get().load(mImageUri1);
mRequestCreator2 = Picasso.get().load(mImageUri2);
mRequestCreator1.into(mPhotoView);
mBtnSwitch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final float prevScale = mPhotoView.getScale();
// MUST use the callback because of timing issue.
Callback callback = new Callback() {
@Override
public void onSuccess() { mPhotoView.setScale(prevScale); }
@Override
public void onError(Exception e) { e.printStackTrace(); }
};
if(sPrevIsOriginal) {
mRequestCreator2.into(mPhotoView, callback);
} else {
mRequestCreator1.into(mPhotoView, callback);
}
sPrevIsOriginal = !sPrevIsOriginal;
}
});
}
答案 0 :(得分:1)
经过大量的试验和错误,我发现了如何做到这一点。您必须使用getSuppMatrix()
获取上一个图像的补充矩阵,然后使用setSuppMatrix()
将该补充矩阵应用于新图像。使用补充矩阵很重要。千万不要试图通过操纵getImageMatrix()
或getDisplayMatrix()
来做到这一点,因为它要么不起作用,要么代码会变得复杂得多。