2013-09-29 39 views
0

我目前正在開展一個小型項目,需要幫助(顯然)。該項目本身涉及到使用JellyBean BeanBag easteregg創建獨立應用程序,併成功完成此任務,但是我也想創建和維護與2.3 sdk的兼容性,並且還使用NineOldAndroids Library設法實現了這一點。 2.3 API不支持方法setScaleX()或setScaleY(),所以我做了以下修改:View.getTranslationX/Y()等價嗎?

  final float scale = lerp(MIN_SCALE,MAX_SCALE,z); 
      setScaleX(scale); setScaleY(scale); 

  final float scale = lerp(MIN_SCALE,MAX_SCALE,z); 
      ViewHelper.setScaleX(v,scale); ViewHelper.setScaleY(v,scale); 

問題來自視圖助手setScale要求一個View參數,而不是隻需要float值的普通調用。我一直在使用

  for (int i=0; i<getChildCount(); i++) { 
       View v = getChildAt(i); 
       ViewHelper.setScaleX(v,scale); ViewHelper.setScaleY(v,scale); 
      } 

嘗試,但這個給每個childview的結果在同一時間被設定爲完全相同的規模而原來的方法設置爲一個唯一的大規模每一個人觀點。任何關於如何達到相同效果的想法?如果我遺漏了任何必要的信息,可以查看完整的源文件here

編輯:使用固定:

static Random sRNG = new Random(); 
    static float MIN_SCALE = 0.2f; 
    static float MAX_SCALE = 1f; 

    static float lerp(float a, float b, float f) { 
     return (b-a)*f + a; 
    } 

    static float randfrange(float a, float b) { 
     return lerp(a, b, sRNG.nextFloat()); 
    } 

      for (int i=0; i<getChildCount(); i++) { 
       View v = getChildAt(i); 
       float scale = randfrange(MIN_SCALE,MAX_SCALE); 
       ViewHelper.setScaleX(v,scale); ViewHelper.setScaleY(v,scale); 
      } 

回答

0

你只是初始化scale一次。爲什麼你會期望它在循環中的每一個都不相同?將scale初始化移動到循環中。

+0

我試着用你的建議,仍然收到相同的結果,你能提供一個你的意思嗎?簡單地將它移到循環中並沒有解決問題 – user1631635

+0

您是否爲每次初始化記錄了「scale」的值?這應該是微不足道的。如果「尺度」值相同,那麼它們當然都是相同的比例。 – kcoppock

+0

您的建議讓我朝着正確的方向前進,並最終解決了問題 – user1631635