2013-05-29 33 views
2

我有一個自定義視圖內的以下代碼,它是一個ScaleGestureDetector,我想要做的是改變視圖的widht和高度,當你捏在屏幕上,但總是ScaleFactor傾向於成爲一個,我不知道如何解釋它,但是ScaleFactor在一秒之內低於/高於一個,然後又變成了一個。你可以看到我在logCat輸出中說什麼。ScaleFactor往往是一個

代碼:

public class simpleOnScaleGestureListener extends SimpleOnScaleGestureListener { 
    @Override 
    public boolean onScale(ScaleGestureDetector detector) { 
     float ScaleFactor = 1.0f; 
     ScaleFactor *= detector.getScaleFactor(); 

     // Don't let the object get too small or too large. 
      ScaleFactor = Math.max(0.1f, Math.min(ScaleFactor, 5.0f)); 


     Log.d("ScaleFactor", "The ScaleFactor is "+ScaleFactor); 

    return true; 
    } 
    @Override 
    public void onScaleEnd(ScaleGestureDetector detector) { 

    } 
} 

logcat的輸出:

05-29 19:37:48.019: D/ScaleFactor(7279): The ScaleFactor is 1.0247091 
05-29 19:37:48.059: D/ScaleFactor(7279): The ScaleFactor is 1.0090069 
05-29 19:37:48.069: D/ScaleFactor(7279): The ScaleFactor is 1.0268435 
05-29 19:37:48.109: D/ScaleFactor(7279): The ScaleFactor is 1.0389019 
05-29 19:37:48.119: D/ScaleFactor(7279): The ScaleFactor is 1.0236202 
05-29 19:37:48.159: D/ScaleFactor(7279): The ScaleFactor is 1.0267988 
05-29 19:37:48.169: D/ScaleFactor(7279): The ScaleFactor is 1.0133468 
05-29 19:37:48.199: D/ScaleFactor(7279): The ScaleFactor is 1.0230283 
05-29 19:37:48.219: D/ScaleFactor(7279): The ScaleFactor is 1.003792 
05-29 19:37:48.599: D/ScaleFactor(7279): The ScaleFactor is 1.0 
05-29 19:37:48.629: D/ScaleFactor(7279): The ScaleFactor is 1.2110677 
05-29 19:37:48.639: D/ScaleFactor(7279): The ScaleFactor is 1.2486423 
05-29 19:37:48.679: D/ScaleFactor(7279): The ScaleFactor is 1.0709958 
05-29 19:37:48.689: D/ScaleFactor(7279): The ScaleFactor is 1.094618 
05-29 19:37:49.229: D/ScaleFactor(7279): The ScaleFactor is 1.0 
05-29 19:37:49.259: D/ScaleFactor(7279): The ScaleFactor is 1.2032005 
05-29 19:37:49.269: D/ScaleFactor(7279): The ScaleFactor is 1.1687788 
05-29 19:37:49.309: D/ScaleFactor(7279): The ScaleFactor is 1.0600644 
05-29 19:37:49.319: D/ScaleFactor(7279): The ScaleFactor is 1.0608224 
05-29 19:37:50.049: D/ScaleFactor(7279): The ScaleFactor is 1.0 
05-29 19:37:50.079: D/ScaleFactor(7279): The ScaleFactor is 1.3738323 
05-29 19:37:50.089: D/ScaleFactor(7279): The ScaleFactor is 1.1507335 
05-29 19:37:50.129: D/ScaleFactor(7279): The ScaleFactor is 1.2026775 
05-29 19:37:50.899: D/ScaleFactor(7279): The ScaleFactor is 1.0 
05-29 19:37:50.929: D/ScaleFactor(7279): The ScaleFactor is 1.5862415 
05-29 19:37:50.939: D/ScaleFactor(7279): The ScaleFactor is 1.1621073 
05-29 19:37:52.559: D/ScaleFactor(7279): The ScaleFactor is 1.0 
05-29 19:37:52.599: D/ScaleFactor(7279): The ScaleFactor is 1.0097717 
05-29 19:37:52.599: D/ScaleFactor(7279): The ScaleFactor is 1.0186267 

回答

2

這段代碼是從Android教程Dragging and Scaling,但有一個重要的區別: '比例因子' 局部變量(阿里納斯 - 約定是以小寫字母開頭的變量名)被聲明爲實例/成員變量mScaleFactor爲原始代碼中的整個類( 'm'代表Android中的成員)。

預期的結果是該行:

ScaleFactor *= detector.getScaleFactor(); 

將積聚在單項比例因子成一個有意義的價值在手勢的過程中,而在你的版本,它與每個調用onScale復位() ,所以你只能看到由每個單獨的縮放事件創建的瞬時值。

如果這仍然有點令人費解,那麼請查閱一本基本的Java教科書,以瞭解不同類型的變量及其範圍的描述。

+0

我會試試!謝謝 –

3

float ScaleFactor = 1.0f; 

你在每捏開始正在重置規模。 嘗試一個全局變量。