0

我目前正在做一个小项目,需要帮助(显然)。该项目本身涉及我从 JellyBean BeanBag easteregg 创建一个独立的应用程序,并且已经成功地这样做了,但是我还想创建并保持与 2.3 sdk 的兼容性,并且还设法使用 NineOldAndroids 库来做到这一点。2.3 API 不支持方法 setScaleX() 或 setScaleY() 所以我做了以下更改:

            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);

问题来自 ViewHelper setScale 需要一个 View 参数,而不是只需要一个浮点值的正常调用。我试过使用

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

但这会导致每个子视图同时设置为完全相同的比例,而原始方法将每个单独的视图设置为唯一的比例。关于如何达到相同效果的任何想法?如果我遗漏了任何必要的信息,可以在此处查看完整的来源。

编辑:通过使用修复:

    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);
            }
4

1 回答 1

0

你只初始化scale一次。为什么你会期望循环中的每一个都不同?将scale初始化移动到循环中。

于 2013-09-29T18:04:08.723 回答