如何使用 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 图像?的主要内容,如果未能解决你的问题,请参考以下文章

Android:导入库,如 PhotoView

Android -- 开源库PhotoView 的基本使用

Android PhotoView基本功能实现

android viewpager嵌套使用photoview异常问题

Android图片处理二:PhotoView源码解析

图片查看器:Android支持图片查看缩放滑动的PhotoView