2013-09-29 36 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