2013-01-10 62 views
0

我使用github的TouchImageView並使用matrix.posttranslate來處理拖動縮放圖像的用戶控件。問題是我需要知道當用戶拖到圖像的邊界,所以圖像不能再水平移動。有沒有人有理想呢?如何知道圖像被翻譯或不與矩陣?

+0

我不熟悉的GitHub或其他項目,但我相信有某種GestureListener方法是接收motionevent(你用它來也許創建矩陣) ..你可以輕鬆地在那裏添加支票。 – Lieuwe

+0

哦,不,我沒有使用任何手勢畫筆,我使用ontouchlistener爲基本。問題是matrix.posttranslate的params與圖片翻譯量無關。當你滑動到邊框,圖像不會再移動,雖然你posttranlate ... – Kiradev

回答

1

如果不轉動,你Matrix然後第二和第五元素爲translateXtranslateY

final Matrix matrix = ...; 
    final float[] values = new float[9]; 

    matrix.getValues(values); 

    final float translateX = values[2]; 
    final float translateY = values[5]; 
+0

我嘗試記錄你上面提到的兩個值,我可以看到他們如何改變。當我向左滑動時,translateX = 0,對吧?但是,當我滑動到圖像的右邊界時,translateX =「constX」和「constX」取決於我如何縮放圖像。那麼我怎麼知道什麼時候刷到右邊框? – Kiradev

+0

請幫幫我,translateX/scale也不是const?我無法理解translateX如何改變圖像 – Kiradev

+0

不,這不是一個常數。 'translateX'的改變取決於你傳遞給'Matrix.postScale'的支點 –

0

感謝。在深度閱讀github上的圖庫源代碼後,我得到了解決方案。要檢查輕掃到右邊界與否是否:

float scaledWidth = Math.round(mOrigWidth * mSaveScale); 
        if (Math.abs(mViewWidth - translateX - scaledWidth) <= 1.0) { 
         // drag to right border 
         ALog.d("touchimageview", "right x: " 
           + (mViewWidth - translateX - scaledWidth)); 
         touchEventListener.onZoomToOriginal(); 
         break; 
        }