2013-06-05 117 views
0

我正在測試我的拖放android遊戲。我得到了拖東西的工作,但我想拖動的對象(ImageView的)被放到另一個ImageView的(在我的代碼我使用objBasket)android將拖動的對象拖放到另一個對象上

這是到目前爲止,我已經試過代碼:

mainLayout = (AbsoluteLayout) findViewById(R.id.mainLayout); 

    mainLayout.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      Log.i("touch", "touched here" + event); 

      if(status == 1) // any event from down and move 
      { 
       LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT, 
         (int)event.getX()-iv.get(0).getWidth()/2, 
         (int)event.getY()-iv.get(0).getHeight()/2); 
       iv.get(0).setLayoutParams(lp); 

      } else if(status == 2){ 
        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT, 
          (int)event.getX()-iv.get(1).getWidth()/2, 
          (int)event.getY()-iv.get(1).getHeight()/2); 
        iv.get(1).setLayoutParams(lp); 
      } else if(status == 3){ 
       LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT, 
         (int)event.getX()-iv.get(2).getWidth()/2, 
         (int)event.getY()-iv.get(2).getHeight()/2); 
       iv.get(2).setLayoutParams(lp); 
      } else if(status == 4){ 
       LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT, 
         (int)event.getX()-iv.get(3).getWidth()/2, 
         (int)event.getY()-iv.get(3).getHeight()/2); 
       iv.get(3).setLayoutParams(lp); 
      } 


      if(event.getAction() == MotionEvent.ACTION_UP){ 
       status = 0; 

       iv.get(0).setBackgroundColor(Color.TRANSPARENT); 
       iv.get(1).setBackgroundColor(Color.TRANSPARENT); 
       iv.get(2).setBackgroundColor(Color.TRANSPARENT); 
       iv.get(3).setBackgroundColor(Color.TRANSPARENT); 
      } else if (event.getAction() == MotionEvent.ACTION_DOWN){ 
       status = 0; 



      } 
      return true; 
     } 
    }); 

我的問題是我應該在MotionEvent.ACTION_DOWN中使用哪種方法?我有點新東西拖放thingy所以我請求你的赦免。有沒有人在這裏做過同樣的事情?請給我建議或示例代碼。提前致謝!

+0

在停止播放時,您應該使用是否您的point(x,y)屬於您的一些圖像,或者您可以看到它們中的兩個是否與其綁定的Rects –

+0

@MarkoLazić相交,感謝您的問題,您是否有示例代碼讓我開始? THanks –

回答

0

這是一種方法,我檢查兩個視圖矩形邊界是否相交

private boolean checkHit(View v, View hit){ 
    Rect rv = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom()); 
    Rect rhit = new Rect(hit.getLeft(), hit.getTop(), hit.getRight(), hit.getBottom()); 
    return rv.intersect(rhit); 
} 

,這是否點所屬

private boolean checkHit(MotionEvent event, View hit){  
    Rect rhit = new Rect(hit.getLeft(), hit.getTop(), hit.getRight(), hit.getBottom()); 
    return rhit.contains((int)event.getRawX(), (int)event.getRawY()); 
} 

然後,只需通過你感興趣的觀點和...

編輯: 打電話給你的ACTION_UP部分是這樣的,我做了這個開關你在if語句

case MotionEvent.ACTION_UP:   
      drop(v, event); 
     break; 

拖放方法

private void drop(View v, MotionEvent event){ 
    checkHit(v, view2beHit); 
    checkHit(event, view2beHit); 
    // Do some for looping, do some other magic, do what you want 
} 

希望這有助於和享受你的工作。

+0

嗨,我請你原諒,我仍然不明白我在哪裏嵌入此代碼? –

+0

查看編輯答案 –

+0

當view2behit和viewtohit可以設置相同的絕對位置嗎? –