2011-02-25 87 views

回答

0

好...用於滾動時使與背景一起精靈movce, 代碼:

初始化

PointF touchStart = new PointF(); 
PointF picStart = new PointF(); 
PointF prevPicStart = new PointF(); 

,並在實施的onTouchEvent()方法來:

@Override 
public boolean onTouchEvent(MotionEvent ev) { 

    switch (ev.getAction()) { 

    case MotionEvent.ACTION_DOWN: 

      touchStart.set(ev.getX(), ev.getY()); 
      x = ev.getX(); 
      y = ev.getY(); 

     break; 

    case MotionEvent.ACTION_MOVE: { 

     newX = ev.getX() - touchStart.x + prevPicStart.x; 
     newY = ev.getY() - touchStart.y + prevPicStart.y; 

     if ((newX <= 0 && newX > 0 - BG_image.getWidth() + ActivityClass.DISP_WIDTH)) { 
      picStart.x = newX; 
     } 

     if ((newY <= 0 && newY > 0 - BG_image.getHeight() + ActivityClass.DISP_HEIGHT)) { 
      picStart.y = newY; 
     } 

     invalidate(); 
     break; 
    } 

    case MotionEvent.ACTION_UP: 

     prevPicStart.x = picStart.x; 
     prevPicStart.y = picStart.y; 

     break; 

    } 
    return true; 
} 

onDraw()方法:

@Override 
protected void onDraw(Canvas canvas) { 
    Paint paint = new Paint(); 
    canvas.drawBitmap(mBG_l1, picStart.x, picStart.y, paint); 

    canvas.translate(picStart.x, picStart.y); 
    person.draw(canvas); 
    } 
0

一種可能的解決方案是使用虛擬的x和y位置精靈,並且具有原點的x和y位置(這將是在屏幕的左上角)。

當您想要滾動屏幕時,只需修改原點x和y位置。

然後在任何地方你畫一些東西到屏幕上,你需要從虛擬位置減去原點位置。

例如,

canvas.drawBitmap(bitmap, x - originX, y - originY, paint); 

每當你移動任何精靈,你操縱他們的'虛擬'x和y位置。如果將虛擬x,y翻譯爲實際屏幕x,y,則通過減去原點,所有東西都會一起移動。

現在,例如,如果您希望您的背景從右向左滾動,您只需將每幀添加到originX。

+0

修改原點X和Y?那不是從那個角度重新繪製整個圖像嗎? 和示例將會有所幫助。 – Blacklight119 2011-02-28 12:24:31

+0

是的,它會重繪整個圖像,這是滾動背景的基礎。 – Kevin 2011-03-01 16:53:58