如何使用 PhotoView Android TOP CROP 图像?
Posted
技术标签:
【中文标题】如何使用 PhotoView Android TOP CROP 图像?【英文标题】:How to TOP CROP Image using PhotoView Android? 【发布时间】:2014-05-18 21:05:51 【问题描述】:我有 1 个具有 layout_width 和 layout_height 的 ImageView 是 match_parent,其中两个是屏幕宽度和高度大小。我需要显示照片来填充全宽,当图像高于 ImageView 高度时,它可以上下滚动。我正在使用 PhotoView 库来缩放、滚动、点击……现在我正在使用 centerCrop 比例类型,但这不是我需要的解决方案。它显示了中心图像的一部分,我需要向上滚动才能从头开始查看。
我尝试了很多自定义视图扩展 ImageView 来显示 Top Crop 样式,但是当我触摸图像时,它更改为默认的 PhotoView 比例类型。仅在不使用 PhotoViewAttacher 时才有效
如何使用 PhotoView 库制作顶部裁剪和滚动 + 缩放 + 触摸...图像?
【问题讨论】:
【参考方案1】:您可以在 Chris Banes 的 PhotoView 的 PhotoViewAttacher 中的 updateBaseMatrix() 下实现更改 CENTER_CROP 比例的 TopCrop 比例。
代码如下:
else if (mScaleType == ScaleType.CENTER_CROP)
float scale = Math.max(widthScale, heightScale);
mBaseMatrix.postScale(scale, scale);
//Changed dy = 0 for top crop
mBaseMatrix.postTranslate((viewWidth - drawableWidth * scale) / 2F, 0);
来源:http://www.widecodes.com/fxSzNWPeVX/android-image-view-top-crop.html
因为我让人们在 ImageView 中请求更多 scaleType:https://code.google.com/p/android/issues/detail?id=58468 我向 Chris Banes 的 PhotoView 添加了自定义比例类型。
我给他发了一个 PR。由于我不知道他是否会接受 PR(或何时),您可以在我的 github 中获取项目:https://github.com/jonathanrz/PhotoView/ 并手动将 aar 添加到您的项目中。
您可以在库内的示例项目中看到 CropTypeActivity 的使用示例。
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。 @bytecode77 我改进了答案。感谢您的建议。 你知道底层矩阵是否可以用默认版本的PhotoView翻译? @Niko 我不知道,你需要做什么? 得到了我的案例的解决方案:***.com/questions/33479400/…【参考方案2】:如果您不想修改 PhotoView 库, 这个解决方案如何使用 CustomAttacher 类。 继承 PhotoViewAttacher 然后重写 getDrawMatrix() 方法。
public class CustomAttacher extends PhotoViewAttacher
public CustomAttacher(ImageView imageView)
this(imageView, true);
public CustomAttacher(ImageView imageView, boolean zoomable)
super(imageView, zoomable);
@Override
public Matrix getDrawMatrix()
Matrix mx = super.getDrawMatrix();
float[] values = new float[9];
mx.getValues(values);
values[Matrix.MTRANS_Y] = 0;
mx.setValues(values);
return mx;
【讨论】:
以上是关于如何使用 PhotoView Android TOP CROP 图像?的主要内容,如果未能解决你的问题,请参考以下文章