如何使用PhotoView Android进行TOP CROP图像?

时间:2014-04-06 19:05:07

标签: android imageview crop

我有1个带有layout_width&的ImageView layout_height是match_parent,其中两个是屏幕宽度和高度大小。我需要显示照片来填充全宽度,当图像高于ImageView高度时,它可以向上和向下滚动。我正在使用PhotoView库来缩放,滚动,点击......现在我正在使用centerCrop比例类型,但它不是我需要的解决方案。它显示了中心图像的一部分,我需要向上滚动才能从头开始查看。

我尝试了很多自定义视图扩展ImageView以显示Top Crop样式但是当我触摸图像时,它更改为默认的PhotoView缩放类型。它仅在不使用PhotoViewAttacher

时有效

如何使用PhotoView库制作顶部裁剪和滚动+缩放+触摸...图像?

2 个答案:

答案 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;
    }

}
相关问题