2011-10-20 9 views
-1
私はImageViewのは、私はちょうどポイントの特定のセットを変換するために私のImageViewのを作っていますpath.Initiallyを追跡するためにアニメーションを翻訳使用しています

が、それはondraw方法で私のコードnot.hereあるんImageViewのアンドロイドパスをトレースしない

@Override 
    public void onDraw(Canvas canvas) { 
     Log.w(this.getClass().getName(),"onDraw of Balls called"); 
     super.onDraw(canvas); 
     mCanvas = canvas; 



     canvas.drawLine(0, 240, 160, 0, mPaint); 
     canvas.drawLine(160, 0, 320, 240, mPaint); 

     mBal = (ImageView)findViewById(R.id.strike); 
     TranslateAnimation mTrans = new TranslateAnimation(0, 240, 160, 0); 
     mTrans.setDuration(6000); 
     mTrans.setFillEnabled(true); 
     mTrans.setFillAfter(true); 
     mTrans.start(); 

    } 

plzのヘルプ。

============================================== ===============

編集1: -

これは私の変更されたコードですが、翻訳は

@Override 
    public void onDraw(Canvas canvas) { 

     Log.w(this.getClass().getName(),"onDraw of Balls called"); 

     BallsOnDraw(canvas); 

    } 

    void BallsOnDraw(Canvas canvas) 
    { 

      canvas.drawLine(0, 240, 160, 0, mPaint); 
      canvas.drawLine(160, 0, 320, 240, mPaint); 

      TranslateAnimation mTrans = new TranslateAnimation(0, 320, 0,240); 

      mTrans.setDuration(6000); 
      SitoliaActivity.mBal.startAnimation(mTrans); 


    } 

答えて

1

にあなたを助けるworking.PL​​zまだありませんカスタムクラスをImageViewやアニメーションと混合しています。 IMHOの方法の1つだけを使用する必要があります。また、私はあなたが実際にImageViewの自身とTranslationAnimationを接続していることがわかりません。

したがって、1つの解決策はTranslateAnimationを使用することですが、mTrans.start()の代わりにmBal.startAnimation(mTrans)を呼び出す必要があります。

他のソリューションは、カスタムビューを使用しonDrawをオーバーライドして、アニメーションを自分で処理するようになり

  • 現在の時刻(System.curentTimeMillis)を保存
  • 使用してキャンバスに直接ビットマップを描きますcanvas.drawBitmap(ビットマップ、X、Y、塗料)。
  • 更新経過時間
  • に基づいて座標のアニメーションがまだ実行する必要がある場合、postInvalidateDelayedを呼び出す(40)。ここで

例のカスタムビューは次のとおりです。

public class C extends View { 

    private static final float FROM_X = 400; 
    private static final float FROM_Y = 100; 
    private static final float TO_X = 10; 
    private static final float TO_Y = 400; 
    private static final int DURATION = 2*1000; // 2 seconds 

    private Bitmap mImage; 
    private long mStart = -1; 
    private Paint mPaint = new Paint(); 

    public C(Context context) { 
     super(context); 
     mImage = ((BitmapDrawable)context.getResources().getDrawable(R.drawable.icon)).getBitmap(); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     boolean finished = false; 
     if (mStart == -1) { 
      // Time to start the animation 
      mStart = SystemClock.uptimeMillis(); 
     } 
     int elapsed = (int)(SystemClock.uptimeMillis() - mStart); 
     if (elapsed >= DURATION) { 
      elapsed = DURATION; 
      finished = true; 
     } 
     float x = FROM_X + (TO_X - FROM_X) * elapsed/DURATION; 
     float y = FROM_Y + (TO_Y - FROM_Y) * elapsed/DURATION; 
     canvas.drawBitmap(mImage, x, y, mPaint); 
     if (!finished) { 
      postInvalidateDelayed(10); 
     } 
    } 

} 
+0

感謝!!カスタムビューを描画することが示唆他のアプローチは、私は私の現在のカスタムビューの子を見ることを確認しなければならないことを意味しますか? – Ruchira

+0

私はyou.i.e.によって提案された最初のアプローチを使用して、私の修正コードを追加しましたTranslateAnimationを使用しますが、それでもまだ動作していません.plz help – Ruchira

+0

2番目の方法では、2番目のカスタムビューを作成しないでください。既存のビューを編集するだけです。 2番目のアプローチでは、問題を引き起こす多くの事柄があります。たとえば、onDrawコールごとにアニメーションを開始すると、おそらくいつも再起動します。しかし、私はこのソリューションで十分な経験がありません。他の解決策の例を追加しました。 –

関連する問題