我目前正在做一个小项目,需要帮助(显然)。该项目本身涉及我从 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);
}