2012-08-31 33 views
3

我已經使用Mike Ortiz's TouchImageView和一個自定義的TouchViewPager,以便它可以在視圖尋呼機內工作的幾個應用程序版本的捏到變焦工作相當不錯。這是相當不錯的了 - 這TouchViewPager覆蓋的唯一方法是onInterceptTouchEvent在ViewPager/FrameLayout下觸摸縮放

public boolean onInterceptTouchEvent(MotionEvent ev) { 
    TouchImageView view = getTouchView(); 
    if(null != view){ 
     if(!view.isAtLimit() && view.getCurrentScale() > 1){ 
      return false; 
     } else { 
      Log.v(TAG, "View limit = " + view.isAtLimit()); 
      Log.v(TAG, "View scale = " + view.getCurrentScale()); 
     } 
    } 

    return super.onInterceptTouchEvent(ev); 
} 

最近,我們創建了一個擴展FrameLayout和管理從互聯網下載的位圖的新觀點。在位圖下載過程中,此佈局顯示ProgressBar,然後在TouchImageView準備就緒後添加它。從視覺上來說,這看起來很有效 - 我們看到一個ProgressBar,然後TouchImageView加載 - 但觸摸都搞砸了,通常只是不一致。

我試過從進度圖像視圖委託onTouchEvent觸摸圖像視圖 - 沒有運氣。我也嘗試覆蓋進度圖像視圖中的onInterceptTouchEvent,以始終返回false,並且也不起作用。

任何人都可以幫助一些想法在哪裏繼續調試這個問題?我一直在爲此工作了大約一個星期,但收效甚微。

這是我看到的行爲:

  1. 活動負荷,形象是ViewPager內可見 - > FrameLayout裏 - > TouchImageView。

  2. ViewPager可用於滑動和更改圖像,但捏放大不會 可用於第一或第二張圖像。最終你會得到一個位置 捏縮放將工作。我無法弄清楚有什麼不同。

  3. 如果您在滑動前嘗試縮放縮放,則ViewPager滑動將不起作用, 需要幾次滑動才能使ViewPager轉到頁面。

  4. 一旦您處於「工作位置」,滑動到頁面就可以正常工作,因爲它可以縮放和平移縮放圖像。所有職位工作後。

+0

如果你分享了更多的代碼,它可能會有所幫助。 –

+0

你的'onInterceptTouchEvent()'函數對我來說工作得差不多:)你是如何實現'isAtLimit()'函數的? – Izydorr

+0

我實際上不再使用該代碼,但我將getters添加到TouchImageView中以返回它的limitX和limitY布爾值。這就是我正在檢查的內容。 –

回答

2

我能得到這個工作,奇怪的是,通過實現TouchImageView類中的復位方法:

public void resetZoom() { 
    Matrix imageMatrix = getImageMatrix(); 
    RectF drawableRect = new RectF(0, 0, bmWidth, bmHeight); 
    RectF viewRect = new RectF(0, 0, getWidth(), getHeight()); 

    imageMatrix.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER); 

    matrix = imageMatrix; 
    setImageMatrix(matrix); 

    fitAndCenterView(); 

    invalidate(); 
} 

這種方法重置圖像縮放調用時 - 當我們成立framelayout裏面的圖像調用這個可以讓所有的東西都成立。奇怪的是,當圖像不在FrameLayout中時,這不是必需的。

當然,我很欣賞任何代碼清理和我們可以做的事情。