2014-04-06 37 views
2

我有1個ImageView與layout_width & layout_height是match_parent,其中兩個是屏幕寬度和高度尺寸。我需要顯示照片來填充整個寬度,當圖像高於ImageView高度時,可以上下滾動。我正在使用PhotoView庫來縮放,滾動,點擊...現在我使用的是centerCrop縮放類型,但它不是我需要的解決方案。它顯示中心圖像的一部分,我需要向上滾動以查看從開始。如何使用PhotoView Android進行頂級CROP圖像?

我試了很多自定義視圖擴展ImageView來顯示頂部裁剪樣式,但是當我觸摸圖像時,它更改爲默認的PhotoView縮放類型。它只適用於不使用時PhotoViewAttacher

我怎樣才能使頂級裁剪和滾動+ zoom +觸摸...圖像通過使用PhotoView庫?

回答

1

您可以實現更改位於ChrisBanes的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的更多scaleTypes:https://code.google.com/p/android/issues/detail?id=58468我添加了自定義縮放類型克里斯Banes`s的PhotoView 。

我發給他一個PR。由於我不知道他是否會接受公關(或何時),所以您可以在我的github中獲得該項目:https://github.com/jonathanrz/PhotoView/並手動將項目添加到您的項目中。

您可以在庫中的示例項目中看到CropTypeActivity中的使用示例。

+0

雖然此鏈接可能會回答問題,但最好在此處包含答案的基本部分並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – bytecode77

+0

@bytecode77我改進了答案。感謝您的建議。 – jonathanrz

+0

你知道底層矩陣是否可以用默認版本的PhotoView進行翻譯? – Niko

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

} 
相關問題