Эффект слайд-эффекта элемента списка для 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 - вправо соответственно. В этой функции вам нужен код вставки для анимации.

пс. Я извиняюсь за мой плохой английский. Всегда рад помочь.