2014-01-11 86 views
0

我的代碼有一些小問題。我正在開發拖放,用戶可以將糖果從jar拖出到特定目標。該過程工作得很好。但是,當我想將特定目標中的糖果拖回罐子時,糖果會相互重疊。如何在拖放後排列圖像

下面的這幅圖顯示了甜食的擺放和排列整齊。之前我拖甜食

Before drag and drop

After drag and drop

然後,甜食正在拖拽後,它看起來像這樣的第二張照片。

基於上面的圖片,我把四個糖果拖進罐子裏。但甜食是重疊的,這就是爲什麼你只能看到一個甜點在罐子裏。假設罐子裏有四顆糖果。

所以,你能幫我。我怎樣才能安排我的甜食,以便在我將它們放回罐子後,就像第一張照片中的甜食一樣排列。

這是代碼。

  case DragEvent.ACTION_DROP: 
      // // Dropped, reassign View to ViewGroup 
      ViewGroup owner = (ViewGroup) view.getParent(); 

      Log.i("drop", "Id First :" + view.getId()); 
      Log.i("drop", "Id Second :" + v.getId()); 
      Log.i("value", "Value :" + view.getContentDescription()); 

      owner.removeView(view); 
      RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(88, 88); 
      lp.addRule(RelativeLayout.CENTER_HORIZONTAL); 
      lp.addRule(RelativeLayout.RIGHT_OF, view.getId()); 


      if(v.getId()==R.id.jaroval) 
      { 
       RelativeLayout container = (RelativeLayout) v; 
       container.addView(view,lp); 
       value=container.getChildCount(); 
       view.setVisibility(View.VISIBLE); 
      } 
      else 
      { 

       GridLayout container2 = (GridLayout) v; 
       container2.setColumnCount(5); 
       container2.addView(view); 
       cValue=container2.getChildCount(); 
       value=10-cValue; 
       view.setVisibility(View.VISIBLE); 

      } 

      sound(); 
      break; 

回答

0

我相信這行導致該問題:

lp.addRule(RelativeLayout.RIGHT_OF, view.getId()); 

你基本上說,您目前加入的觀點應該是自身所具有的權利。相反,您需要提供添加到jar中的上一個項目的ID。要做到這一點,您可以簡單地存儲最近添加的項目的ID。

示例代碼來實現這一目標:

//Create a variable that can be accessed and initialize it as -1 
int mostRecentlyAddedView = -1; 

//Then in the method you handle drag event 
if(mostRecentlyAdddedView == -1){ //This is the very first view, therefore no need to add toRight layout. 
    // update the variable 
    mostRecentlyAdddedView = view.getId(); 

    // ... do other things here 
} else { 
    // ... other things 
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(88, 88); 
    lp.addRule(RelativeLayout.CENTER_HORIZONTAL); 
    lp.addRule(RelativeLayout.RIGHT_OF, mostRecentlyAdddedView); 
    // ... other things 
} 
+0

你能告訴我我如何能儲存物品的ID一些例子最近添加的?謝謝 –

+0

更新了我的回答 – ayorhan

+0

謝謝先生。我試過了代碼。但它不起作用。請問我應該在哪裏放置if(v.getId()== R.id.jaroval)''代碼?在else語句裏面還是什麼? –