Android 애니메이션 프레임 워크를 사용하여 시간 경과에 따른 움직임을 계산하고 싶습니다. 그러나 내가 만드는 TranslateAnimations는 항상 getTransformation을 호출 할 때마다 끝났음을 나타내므로 변형이 올바르지 않게 표시됩니다. 2.5 초 후에 100.0, 1000.0 (참)내 개체와 함께 애니메이션을 사용하려면 어떻게해야합니까?
테스트 1 :
시험 초기에는 1 : 아래의 코드에서, 나는 void1()와 void2()를 실행 한 후 다음과 같은 로그 출력을 기대 150.0, 1500.0 2.5 초 후 100.0, 1000.0 (참)
테스트 2 : 처음에 (참)
시험이 150.0, 1500.0 (참) 대신
, I GE
시험 초기에는 1 : 12.0, 34.0 (TRUE)
테스트 1 2.5 초 후에이 출력을 t 12.0, 34.0 (TRUE)
시험 2 초기 : 0.0, 0.0 (TRUE)
테스트 2 2.5 초 후 : 0.0, 0.0 (TRUE)
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 + ")");
}
방법 캘리포니아 n 내가 기대하는 결과를 얻었습니까?
테스트 1에서는 'newpts [] = {12, 34}'로 설정했습니다. 로그 문 앞에 값을 변경하지 않으므로 어떻게 다르게 출력 할 것으로 예상합니까? – Andreass
Matrix.mapPoints (newpts)에는 부작용이 있습니다 (newpts에 쓰십시오). – Ben