Я пытаюсь реализовать перетаскивание кнопок по плитке.
Кнопки создаются динамически один раз. Их 15, но они используются только в том случае, если они видны, присвоив им букву.
Их можно выбрать, нажав.
У меня также есть методы, которые будут перетасовывать или выравнивать.
Выравнивание осуществляется путем сравнения положения кнопок и равномерного расположения их.
Проблема в том, что когда я их перетаскиваю, они обычно не выравниваются после перетаскивания, даже если я указал выравнивание как часть кода перетаскивания.
Вторая проблема заключается в том, что Кнопка иногда нажимается в процессе перетаскивания.
// DRAGGING ROUTINES
private class SingleTapConfirm extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapUp(MotionEvent event) {
return true;
}
}
View.OnTouchListener mover = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// dragging
Log.e("MotionEvent", String.valueOf(event.getAction()));
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_BUTTON_PRESS: //
dX = v.getX() - event.getRawX();
break;
case MotionEvent.ACTION_MOVE:
v.animate()
.x(event.getRawX() + dX)
.setDuration(0)
.start();
break;
case MotionEvent.ACTION_OUTSIDE:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_BUTTON_RELEASE: //
case MotionEvent.ACTION_CANCEL: //
default:
Arrays.sort(buttons, new Comparator() {
@Override
public int compare(Button b1, Button b2) {
if (b1.getX() >= b2.getX()) return 1; // >= gives b1 preference; 2 buttons cannot be in same place
else return -1;
}
});
alignButtons();
break;
}
// single tap adds selected button letter to answer
if (gestureDetector.onTouchEvent(event)) {
addLetter(v);
if (dragger)
alignButtons();
}
return true;
}
};
private void alignButtons() {
Log.i("ButtonStart", Float.toString(buttonStart) );
int seq = 0;
for (int i = 0; i < buttons.length; i++) {
if (buttons.getVisibility() == View.VISIBLE) {
float pos = buttonStart + (seq * buttonWidth);
buttons.setX(pos);
seq++;
Log.i(buttons.getText().toString(), Float.toString(buttons.getX()));
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ndroid-app
Как выровнять элементы управления после перетаскивания в приложении Android? ⇐ Android
Форум для тех, кто программирует под Android
1762522392
Anonymous
Я пытаюсь реализовать перетаскивание кнопок по плитке.
Кнопки создаются динамически один раз. Их 15, но они используются только в том случае, если они видны, присвоив им букву.
Их можно выбрать, нажав.
У меня также есть методы, которые будут перетасовывать или выравнивать.
Выравнивание осуществляется путем сравнения положения кнопок и равномерного расположения их.
Проблема в том, что когда я их перетаскиваю, они обычно не выравниваются после перетаскивания, даже если я указал выравнивание как часть кода перетаскивания.
Вторая проблема заключается в том, что Кнопка иногда нажимается в процессе перетаскивания.
// DRAGGING ROUTINES
private class SingleTapConfirm extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapUp(MotionEvent event) {
return true;
}
}
View.OnTouchListener mover = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// dragging
Log.e("MotionEvent", String.valueOf(event.getAction()));
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_BUTTON_PRESS: //
dX = v.getX() - event.getRawX();
break;
case MotionEvent.ACTION_MOVE:
v.animate()
.x(event.getRawX() + dX)
.setDuration(0)
.start();
break;
case MotionEvent.ACTION_OUTSIDE:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_BUTTON_RELEASE: //
case MotionEvent.ACTION_CANCEL: //
default:
Arrays.sort(buttons, new Comparator() {
@Override
public int compare(Button b1, Button b2) {
if (b1.getX() >= b2.getX()) return 1; // >= gives b1 preference; 2 buttons cannot be in same place
else return -1;
}
});
alignButtons();
break;
}
// single tap adds selected button letter to answer
if (gestureDetector.onTouchEvent(event)) {
addLetter(v);
if (dragger)
alignButtons();
}
return true;
}
};
private void alignButtons() {
Log.i("ButtonStart", Float.toString(buttonStart) );
int seq = 0;
for (int i = 0; i < buttons.length; i++) {
if (buttons[i].getVisibility() == View.VISIBLE) {
float pos = buttonStart + (seq * buttonWidth);
buttons[i].setX(pos);
seq++;
Log.i(buttons[i].getText().toString(), Float.toString(buttons[i].getX()));
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79694833/how-do-i-align-controls-after-dragging-on-android-app[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия