0

Я использую схему потока из ссылки https://github.com/ApmeM/android-flowlayout. Теперь я создаю несколько динамических кнопок на этом макете и устанавливаю ontouchlistener на них. Проблема в том, что когда я меняю положение одной кнопки прикосновением, другие кнопки также меняют положение. Я хочу изменить положение только кнопки, которую я касаюсь. Есть ли способ сделать это или другое решение.Настройка ontouchlistener на нескольких динамических кнопках с раскладкой

public class MainActivity extends AppCompatActivity implements View.OnTouchListener { 
      Button floatButton; 
     Button _view; 
     private int _xDelta; 
     private int _yDelta; 
     ViewGroup layout; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main2); 
      Toolbar toolbar = (Toolbar) this.findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 
      layout = (ViewGroup) findViewById(R.id.flowLayout); 
      RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT 
        , ViewGroup.LayoutParams.WRAP_CONTENT); 
      layoutParams.leftMargin = 50; 
      layoutParams.topMargin = 50; 
      layoutParams.bottomMargin = 0; 
      layoutParams.rightMargin = 0; 
      for (int i = 0; i < 10; i++) { 
       _view = new Button(this); 
       _view.setText("Button"+(i+1)); 
       _view.setLayoutParams(layoutParams); 
       _view.setOnTouchListener(this); 
       layout.addView(_view); 
      } 
     } 
     public boolean onTouch(View view, MotionEvent event) { 
      final int X = (int) event.getRawX(); 
      final int Y = (int) event.getRawY(); 
      try { 
       switch (event.getAction() & MotionEvent.ACTION_MASK) { 
        case MotionEvent.ACTION_DOWN: 

         FlowLayout.LayoutParams lParams = (FlowLayout.LayoutParams) view.getLayoutParams(); 
         _xDelta = X - lParams.leftMargin; 
         _yDelta = Y - lParams.topMargin; 
         break; 
        case MotionEvent.ACTION_UP: 
         break; 
        case MotionEvent.ACTION_POINTER_DOWN: 
         break; 
        case MotionEvent.ACTION_POINTER_UP: 
         break; 
        case MotionEvent.ACTION_MOVE: 
         FlowLayout.LayoutParams layoutParams = (FlowLayout.LayoutParams) view.getLayoutParams(); 
         layoutParams.leftMargin = X - _xDelta; 
         layoutParams.topMargin = Y - _yDelta; 
         layoutParams.rightMargin = 0; 
         layoutParams.bottomMargin = 0; 
         view.setLayoutParams(layoutParams); 
         break; 
       } 
      }catch (Exception ex){ 
       Log.d("ON Touch ", ex.toString()); 
      } 
      layout.invalidate(); 
      return true; 
     } 
    } 

ответ

0

Более вероятно, это происходит потому, что вы используете RelativeLayout и другие позиции объекта, так или иначе определяются по отношению к кнопке вы движетесь. Если это так, то поведение, которое вы описываете, ожидается. Но нам нужно увидеть XML-файл, чтобы точно знать, что происходит.

+0

Есть ли какое-либо другое решение, которое я просто хочу добавить на экран динамические кнопки и хочу, чтобы они реализовывались на сенсорном прослушивателе. –

+0

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

+0

Спасибо, bremen_matt. можете ли вы объяснить, как позиционировать элементы относительно родителя, если я надуваю кнопку из файла макета xml. –