2012-06-02 101 views
0

我擁有的東西是當我點擊並拖動位圖時它會跟隨你的手指,但它確實只能讓我將它移動到右側,我可以向下看一些角度左邊,如果我想,但除此之外幾乎不可能讓事情移動。我需要能夠在所有方向移動它,你能幫助我嗎?這是我的代碼:在各個方向移動位圖

@Override 
    protected void onDraw(Canvas canvas) 
    { 
     super.onDraw(canvas); 
     clear.setARGB(0, 0, 0, 0); 
     AndroidDudeHitbox.set(AndroidX, AndroidY, AndroidX + AndroidDude.getWidth(), AndroidY + AndroidDude.getHeight()); 
     canvas.drawRect(AndroidDudeHitbox, clear); 
     canvas.drawBitmap(AndroidDude, AndroidX - (AndroidDude.getWidth()/2), AndroidY - (AndroidDude.getHeight()/2), null); 
     if (AndroidX > canvas.getWidth() || AndroidX < 0 || AndroidY > canvas.getHeight() || AndroidY < 0) {AndroidX = 30; AndroidY = canvas.getHeight()/2;} 
     invalidate(); 
    } 
@Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     try { 
      Thread.sleep(30); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     if (AndroidDudeHitbox.contains((int)event.getX(), (int) event.getY())) 
     { 
      switch (event.getAction()) 
      { 
      case MotionEvent.ACTION_MOVE: 
       AndroidX = (int) event.getX(); 
       AndroidY = (int) event.getY(); 
       break; 
      } 
     } 

     return true; 
    } 

編輯: 我剛剛發現,我不能直接將位圖,以正確的。我可以直接向下和向右移動它。但沒有其他人。

回答

0

您檢查是否AndroidDudeHitbox包含點,如果它的感動,但你的繪圖AndroidDude在上面。要麼刪除下面的if語句,要麼在AndroidDude上繪製hitbox。

if (AndroidDudeHitbox.contains((int)event.getX(), (int) event.getY())){

+0

這並不能解決我的問題,但我可以telll它wouldnt,因爲移動什麼是首先繪製不應該有所作爲,但我的表述只是問我在哪裏我在觸摸點的像素內觸摸,這已經工作,我需要要知道爲什麼它只會讓我把他拖下來或拖到右邊。但謝謝你的迴應。 –

0

首先:在你的onTouch方法,不要做一個「睡眠」打電話。這是在尋求麻煩。首先,暫時刪除檢查AndroidDudeHitbox.contains((int)event.getX(),(int)event.getY())的if語句。只需使用event.getX()和event.getY()更新AndroidX和AndroidY。

最後,我認爲最重要的是,在更改onTouch中的AndroidX和/或AndroidY值後,調用'invalidate()'。只有對'invalidate()'的調用纔會導致稍後再次調用onDraw。

public boolean onTouch(View v, MotionEvent event) 
{ 
    if (true /*AndroidDudeHitbox.contains((int)event.getX(), (int) event.getY())*/) 
    { 
     switch (event.getAction()) 
     { 
     case MotionEvent.ACTION_MOVE: 
      AndroidX = (int) event.getX(); 
      AndroidY = (int) event.getY(); 
      invalidate(); // important!!! 
      break; 
     } 
    } 

    return true; 
} 

如果添加到呼叫「無效()」的作品,再添加「如果」語句,你暫時刪除,看看是否一切仍然有效。