2010-04-23 6 views
3

나는 간단한 이미지 애니메이션을 얻으려고하고있다. 마치 헬리콥터의 프로펠러 날개가 돌고있는 것처럼 보이게하고 싶습니다. 헬리콥터에 대한 3 개의 이미지가 있으며 애니메이션 진행 상황에 따라 이러한 이미지 중 하나를 표시하고 있습니다. 문제는 한 번에 하나의 이미지가 표시되는 것과 대조적으로 세 이미지가 모두 서로 겹쳐서 결국 애니메이션을 만드는 것입니다. 이것은 내가 지금까지 한 일이다. 나는이 canvas.drawColor (Color.BLACK)을 사용하여 캔버스를 지우려고 시도했으나 전체 캔버스를 지워 버렸다. 이는 내가 원하는 것이 아니다. 안드로이드 이미지 애니메이션을 수행하는 방법

내가 무엇을 가지고 :

View 클래스에서

1) :

정적 클래스 헬리콥터 { 개인 긴 mLastUpdate; private long mProgress = 0; private final float mX; 개인 최종 float mY;

private final Bitmap mHelicopter1; 
    private final Bitmap mHelicopter2; 
    private final Bitmap mHelicopter3; 
    private final float mRadius; 

    Helicopter(long mLastUpdate, float mX, float mY, 
       Bitmap helicopter1, Bitmap helicopter2, Bitmap helicopter3) { 
     this.mLastUpdate = mLastUpdate; 
     this.mX = mX; 
     this.mY = mY; 
     this.mHelicopter1 = helicopter1; 
     this.mHelicopter2 = helicopter2; 
     this.mHelicopter3 = helicopter3; 
     mRadius = ((float) mHelicopter1.getWidth())/2f; 

    } 

    public void update(long now) { 
     mProgress += (now - mLastUpdate); 

     if(mProgress >= 400L) 
     { 
     mProgress = 0; 
     } 
     mLastUpdate = now; 
    } 

    public void setNow(long now) { 
     mLastUpdate = now; 
    } 

    public void draw(Canvas canvas, Paint paint) 
    {  

     if (mProgress < 150L) 
     { 
      canvas.drawBitmap(mHelicopter1, mX - mRadius, mY - mRadius, paint); 
     } 
     else if (mProgress < 300L) 
     { 
      canvas.drawBitmap(mHelicopter2, mX - mRadius, mY - mRadius, paint); 

     } 
     else if(mProgress < 400L) 
     { 
     canvas.drawBitmap(mHelicopter3, mX - mRadius, mY - mRadius, paint); 
     } 

    } 

    public boolean done() { 
     return mProgress > 700L; 
    } 
} 

private ArrayList<Helicopter> mHelicopters = new ArrayList<Helicopter>(); 

2)이이 스레드의 run()에서 호출되는 :

private void doDraw(Canvas canvas) 
    { 
    final long now = SystemClock.elapsedRealtime(); 

     canvas.save(); 

     for (int i = 0; i < mHelicopters.size(); i++) { 
      final Helicopter explosion = mHelicopters.get(i); 
      explosion.update(now); 
     } 

     for (int i = 0; i < mHelicopters.size(); i++) { 
      final Helicopter explosion = mHelicopters.get(i); 
      explosion.draw(canvas, mPaint); 
     } 

     canvas.restore(); 
    } 

누군가가 나를 도울 수 있습니까? 애니메이션에서 웹의 예제를 많이 보았습니다. 텍스트는 항상 포함되지만 이미지는 포함하지 않는 것 같습니다. 감사.

답변

1

일반적으로 캔버스를 그리는 스레드는 전체 캔버스와 모든 소품/액터를 다시 그립니다. 그렇게하면 헬리콥터 블레이드 이미지 인덱스를 증가 시키면 나머지 캔버스가 그려진 후 그려집니다. 다음과 같은 것 : 배경 -> 헬기 -> 블레이드 1 다음 반복 배경 -> 헬리콥터 -> 블레이드 2.

관련 문제