Я использую схему потока из ссылки 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;
}
}
Есть ли какое-либо другое решение, которое я просто хочу добавить на экран динамические кнопки и хочу, чтобы они реализовывались на сенсорном прослушивателе. –
Вы все равно можете использовать относительный макет, но вам нужно будет позиционировать элементы относительно родителя, а не друг друга. В качестве альтернативы, если есть всего несколько кнопок, которые вы хотите переместить, вы можете попытаться расслоить их рамками. –
Спасибо, bremen_matt. можете ли вы объяснить, как позиционировать элементы относительно родителя, если я надуваю кнопку из файла макета xml. –