我想使用Android动画框架计算随着时间的推移。但是,我创建的TranslateAnimations似乎总是表明它们在我对getTransformation进行的每次调用中都已结束,并且转换看起来不正确。在下面的代码,我希望以下日志输出行驶void1()和void2()后:2.5秒后100.0,1000.0(真)如何使用我自己的对象使用动画?
测试1::
试验1最初150.0,1500.0 (真)
试验2最初:100.0,1000.0(真)
试验2 2.5秒后:150.0,1500.0(真)
相反,我GE Ť这样的输出:
试验1最初:12.0,34.0(真)
试验1之后2.5秒:12.0,34.0(真)
试验2最初:0.0,0.0(真)
试验2后2.5秒:0.0,0.0(真)
void test1() {
Animation anim = new TranslateAnimation(100, 1000, 200, 2000);
anim.setFillAfter(true);
anim.setFillBefore(true);
anim.setDuration(5000);
anim.startNow();
Transformation t = new Transformation();
boolean hasended = anim.getTransformation(AnimationUtils.currentAnimationTimeMillis(), t);
float newpts[] = {12, 34};
t.getMatrix().mapPoints(newpts);
Log.v("AnimationTest", "Test 1 initially: " + newpts[0] + ", " + newpts[1] + " (" + hasended + ")");
long target = System.currentTimeMillis() + 2500;
while (System.currentTimeMillis() < target)
System.gc();
hasended = anim.getTransformation(AnimationUtils.currentAnimationTimeMillis(), t);
t.getMatrix().mapPoints(newpts);
Log.v("AnimationTest", "Test 1 after 2.5 seconds: " + newpts[0] + ", " + newpts[1] + " (" + hasended + ")");
}
void test2() {
Animation anim = new TranslateAnimation(100, 1000, 200, 2000);
anim.setFillAfter(true);
anim.setFillBefore(true);
anim.setDuration(5000);
anim.startNow();
//Based on http://stackoverflow.com/questions/4112599/android-how-to-stop-animation-cancel-does-not-work
Transformation t = new Transformation();
boolean hasended = anim.getTransformation(AnimationUtils.currentAnimationTimeMillis(), t);
Matrix transformationMatrix = t.getMatrix();
float[] matrixValues = new float[9];
transformationMatrix.getValues(matrixValues);
float transX = matrixValues[Matrix.MTRANS_X];
float transY = matrixValues[Matrix.MTRANS_Y];
Log.v("AnimationTest", "Test 2 initially: " + transX + ", " + transY + " (" + hasended + ")");
long target = System.currentTimeMillis() + 2500;
while (System.currentTimeMillis() < target)
System.gc();
hasended = anim.getTransformation(AnimationUtils.currentAnimationTimeMillis(), t);
transformationMatrix = t.getMatrix();
transformationMatrix.getValues(matrixValues);
transX = matrixValues[Matrix.MTRANS_X];
transY = matrixValues[Matrix.MTRANS_Y];
Log.v("AnimationTest", "Test 2 after 2.5 seconds: " + transX + ", " + transY + " (" + hasended + ")");
}
如何CA ñ我得到了我期待的结果?
在测试1中,您设置了'newpts [] = {12,34}'。您如何期望它以不同的方式输出它,因为您不会在日志语句之前更改这些值? – Andreass 2011-04-11 08:17:45
Matrix.mapPoints(newpts)有副作用(写入newpts)。 – Ben 2011-04-12 05:34:38