2014-01-11 9 views
0

У меня есть небольшая проблема с моим кодом. Я развиваю перетаскивание, где пользователи могут вытащить конфеты из банки в конкретную цель. Процесс работает отлично. Однако, когда я хочу перетащить сладости из конкретной цели обратно в банку, сладости накладываются друг на друга.Как организовать изображение после перетаскивания

На этом рисунке показано, что сладости размещены и расположены аккуратно. Перед тем, как перетащить конфеты из

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()); 

Вы в основном говорят, что вид вы в настоящее время добавления должны быть справа от себя. Вместо этого вам нужно указать идентификатор предыдущего элемента, добавленного в банку. Для этого вы можете просто сохранить идентификатор недавно добавленного элемента.

Пример кода для достижения этой цели:

//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

Можете ли вы показать мне пример того, как можно хранить идентификатор элемента недавно добавил? Спасибо –

+0

обновил мой ответ – ayorhan

+0

Спасибо, сэр. Я пробовал код. Однако он не работает. Могу ли я спросить, где я должен положить код 'if (v.getId() == R.id.jaroval)? Внутри инструкции else или что? –

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