Эффект слайд-эффекта элемента списка для Android
Я переношу приложение iPhone в приложение для Android, и одна из трудностей - воссоздание функциональных возможностей, которые являются родными для iPhone.
Я нашел встроенную функциональность iPhone:
Когда пользователь выполняет переключение слайдов на указанный элемент в представлении списка, появляется кнопка удаления.
Есть ли версия для этого в Android?
Можно ли использовать и повторно использовать/настраивать?
Ответы
Ответ 1
Это немного сложнее. Это то, что я говорил бы с более высокого уровня.
-
Создайте пользовательскую ViewGroup/Layout, чтобы удерживать элемент списка. Внутри этого макета у вас есть изображения ваших текстовых строк или что у вас есть, а также кнопка удаления. Вы также здесь слушаете жесты, чтобы скрыть или отобразить кнопку удаления.
-
В вашем адаптере списка вам нужно будет отслеживать, какой элемент показывает кнопку удаления, а какой нет. Кроме того, вам нужно будет применить прослушиватель кликов к каждой из кнопок удаления элемента списка. Каждый раз, когда вы назначаете эти состояния в элементе списка, вы должны установитьTag (...) и сохранить позицию позиции списка, чтобы при щелчке вы могли указать, какой номер элемента должен быть удален.
-
После удаления необходимо обновить список, чтобы он вступил в силу. В зависимости от того, какой тип адаптера вы используете, чтобы определить, как вы обновляете адаптер.
Надеюсь, это имеет смысл. Но я определенно думаю, что это самый простой способ, так как я сделал это пару раз с аналогичной функциональностью.
Ответ 2
Я думаю, вы могли бы либо попытаться реализовать прослушиватель жестов над самим списком, но было бы сложно получить правильный идентификатор. Поскольку я не сделал этого сам, я не могу точно ответить.
В противном случае вы можете иметь собственное представление в качестве элемента в списке и иметь прослушиватель жестов для всех дочерних элементов.
Обнаружение жестов Fling на макете сетки
Для некоторых основных примеров чтения и кода
Ответ 3
Я не думаю, что для этого есть встроенная функция API.
Однако обходным путем было бы использовать функцию onFling в представлении в списке. Вы могли бы использовать это, чтобы выполнить то, что хотите.
Ответ 4
Вот как я понимаю этот эффект. У нас есть ListView lvSimple, и мы добавляем onTouchListener в наш lvSimple. Это мой рабочий код.
float historicX = Float.NaN, historicY = Float.NaN;
static final int DELTA = 50;
enum Direction {LEFT, RIGHT;}
...
ListView lvSimple = (ListView) findViewById(R.id.linLayout);
...
lvSimple.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event)
{
// TODO Auto-generated method stub
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
historicX = event.getX();
historicY = event.getY();
break;
case MotionEvent.ACTION_UP:
if (event.getX() - historicX < -DELTA)
{
FunctionDeleteRowWhenSlidingLeft();
return true;
}
else if (event.getX() - historicX > DELTA)
{
FunctionDeleteRowWhenSlidingRight();
return true;
} break;
default: return false;
}
return false;
}
});
где функция FunctionDeleteRowWhenSlidingLeft() вызывается, когда мы сдвигаемся влево, FunctionDeleteRowWhenSlidingRight - вправо соответственно. В этой функции вам нужен код вставки для анимации.
пс. Я извиняюсь за мой плохой английский. Всегда рад помочь.