애니메이션을 사용하는 것이 가장 간단한 해결책이 될 것입니다. 직접 만들거나 여러 번 조합 해보십시오. TranslateAnimations 및 ScaleAnimations을 사용할 수 있습니다.
이렇게하면 스크롤보기를 사용하는 대신 각 숫자를 고유 한 TextView로 변환 할 수 있습니다.
Interpolator으로 가속을 제어 할 수 있습니다. 인터폴 레이터는 안드로이드가 여유를 어떻게 처리 하는지를 나타냅니다. 속도 향상/감속 효과에 대해서는 AccelerateDecelerateInterpolator이 좋습니다.
AnimationSet을 사용하면 동일한보기에 여러 애니메이션을 적용 할 수 있습니다. 훌륭한 AnimationSet을 어떻게 조합 하는지를 파악하는 것이 프로젝트에서 가장 어려운 부분입니다. "채우기"속성에주의하십시오. 사실 약간 놀아 본 후, 준비된 애니메이션을 사용하는 것보다 맞춤 애니메이션이 더 간단하다고 생각합니다.
my GitHub project을 포크하여 매우 간단하게 구현할 수 있습니다. 4 월 17 일 전에 여러 개의 사전 제작 애니메이션을 사용했습니다. 최신 버전을 보면 맞춤 애니메이션이 표시됩니다.
하나의 애니메이션 기간을 설정하면 각 애니메이션의 타이밍이 자동으로 처리됩니다. A Handler은 이전 번호가 끝난 후 다음 번호를 호출합니다. 나는 이것이 X 초마다 함수를 호출하여 모든 것을 업데이트하는 것보다 조금 깔끔한 것이라고 생각한다.
의 기능 개요 :
- 활동 (CountDownActivity.java)를 통해 모든 것을 본다.
- Activitiy의 레이아웃 XML에는 카운트 다운을 시작하는 데 사용되는 버튼이 있습니다.
- 카운트 다운이 시작되면 버튼이 사라집니다. 카운트 다운이 완료되면 다시 나타납니다.
- 는 활동은 Handler (MotionHandler.java)가 포함되어 있습니다. Handler은 숫자의 이동 및 타이밍을 제어합니다.
- 를 사용하여 수행되어 카운트 다운 할 때, 핸들러는 작업을 통보를 시작하는 데 사용 카운트 다운을 다시 시작합니다.
참고 - 이전에 하나의 AnimationSet에서 4 개의 준비된 애니메이션을 사용하고 있었지만 하나의 맞춤 애니메이션 만 포함하도록 편집했습니다 ... 원하는대로 알고리즘을 조정할 수 있습니다.
이 사용자 정의 애니메이션은 숫자가 더 크고 작게 표시되도록 Cycloid을 사용합니다.
/**
* A custom animation to move and scale the numbers.
*
*/
public class NumberAnimation extends Animation
{
final public static float MINIMUM = 3;
private int mHorizontal;
private int mScaling;
public NumberAnimation(int horizontalMovement, int scaling)
{
mHorizontal = horizontalMovement;
mScaling = scaling;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t)
{
// Cycloid repeats every 2pi - scale interpolatedTime to that
double time = 2 * Math.PI * interpolatedTime;
// Cycloid function
float currentScale = (float) (mScaling * (1 - Math.cos(time))) + MINIMUM;
Matrix matrix = t.getMatrix();
matrix.preScale(currentScale, currentScale);
matrix.postTranslate(mHorizontal * interpolatedTime, 0);
}
}
피터, 내 질문에 대답 해 주셔서 감사합니다! –
@ SomeoneSomewhere - 재미있었습니다. 희망이 도움이됩니다! –