2011-10-20 2 views
-1

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

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

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

Edit 1: -

Это мой модифицированный код, но перевод еще не working.PLz помочь

@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

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

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

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

  • сохранить текущее время (System.curentTimeMillis)
  • нарисовать Bitmap непосредственно на холсте, используя 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); 
     } 
    } 

} 
+0

Спасибо !! Другой подход, по которому вы предложили создать пользовательский вид, означает, что я должен сделать это представление дочерним по отношению к моему существующему пользовательскому представлению? – Ruchira

+0

Я добавил свой модифицированный код, используя первый подход, предложенный вами.i.e. используйте TranslateAnimation, но он по-прежнему не работает. plz help – Ruchira

+0

Для второго подхода вы не должны создавать второй пользовательский вид, просто отредактируйте уже существующий. Для второго подхода может быть много вещей, которые вызывают проблему, например, если вы запускаете анимацию в каждом вызове onDraw, вы, вероятно, всегда начинаете ее повторно. Но у меня недостаточно опыта с этим решением. Я добавил пример для другого решения. –

Смежные вопросы