我有1个带有layout_width&的ImageView layout_height是match_parent,其中两个是屏幕宽度和高度大小。我需要显示照片来填充全宽度,当图像高于ImageView高度时,它可以向上和向下滚动。我正在使用PhotoView库来缩放,滚动,点击......现在我正在使用centerCrop比例类型,但它不是我需要的解决方案。它显示了中心图像的一部分,我需要向上滚动才能从头开始查看。
我尝试了很多自定义视图扩展ImageView以显示Top Crop样式但是当我触摸图像时,它更改为默认的PhotoView缩放类型。它仅在不使用PhotoViewAttacher
时有效如何使用PhotoView库制作顶部裁剪和滚动+缩放+触摸...图像?
答案 0 :(得分:1)
您可以在Chris Banes的PhotoView的PhotoViewAttacher中的updateBaseMatrix()下更改TopCrop比例更改CENTER_CROP比例。
以下是代码:
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中请求更多scaleTypes:https://code.google.com/p/android/issues/detail?id=58468我在Chris Banes的PhotoView中添加了自定义比例类型。
我向他发送PR。由于我不知道他是否会接受PR(或何时),您可以在我的github中获取项目:https://github.com/jonathanrz/PhotoView/并手动将aar添加到您的项目中。
您可以在库中的示例项目中看到CropTypeActivity中的使用示例。
答案 1 :(得分:1)
如果您不想修改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;
}
}