imageview не отслеживая путь Android - PullRequest
0 голосов
/ 20 октября 2011

Я использую анимацию перевода, чтобы заставить изображение прослеживать путь. Сначала я просто делаю свое изображение, чтобы перевести через определенный набор точек, но это не так.

@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: -

Это мой модифицированный код, но перевод все еще не работает. PLZ help

@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 Ответ

1 голос
/ 21 октября 2011

Вы смешиваете пользовательские классы с ImageViews и анимацией. ИМХО, вы должны использовать только один из методов. Также я не вижу, чтобы вы на самом деле связывали TranslationAnimation с самим ImageView.

Итак, одним из решений будет использование TranslateAnimation, но тогда вам нужно будет вызвать mBal.startAnimation (mTrans) вместо mTrans.start ().

Другим решением будет использование пользовательского представления, переопределение onDraw и обработка анимации самостоятельно:

  • сохранить текущее время (System.curentTimeMillis)
  • отрисовка растрового изображения непосредственно в Canvas с использованием canvas.drawBitmap (bitmap, x, y, paint);
  • обновить координаты на основе прошедшего времени
  • если анимация все еще должна работать, вызовите 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);
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...