Эффект кнопки «Вставить в» элемента «Список» для Android - PullRequest
11 голосов
/ 01 июля 2011

Я портирую приложение для iPhone в приложение для Android, и одна из трудностей заключается в воссоздании функций, присущих iPhone.

Я нашел нативную функциональность iPhone: Когда пользователь выполняет слайд-касание указанного элемента в списке, появляется кнопка удаления.

Есть ли версия для этого в Android? Можно ли использовать и повторно использовать / настраивать?

Ответы [ 4 ]

1 голос
/ 18 августа 2011

Это немного сложнее для достижения.Это то, что я бы делал, разговаривая с более высокого уровня.

  1. Создайте пользовательскую ViewGroup / Layout для хранения элемента списка.Внутри этого макета у вас есть текстовые изображения или что-то еще, а также кнопка удаления.Вы также здесь слушаете жесты, чтобы скрыть или показать кнопку удаления.

  2. В вашем адаптере списка вам нужно будет отслеживать, какой элемент показывает кнопку удаления, а какой нет.,Кроме того, вам потребуется применить прослушиватель щелчков к каждой кнопке удаления элемента списка.Каждый раз, когда вы присваиваете эти состояния элементу списка, вы должны устанавливать метку (...) и сохранять позицию элемента списка, чтобы при щелчке вы могли определить, какой номер элемента должен быть удален.* После удаления вы должны обновить список, чтобы он вступил в силу.В зависимости от того, какой тип адаптера вы используете, он будет определять, как вы обновите адаптер.

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

0 голосов
/ 10 апреля 2013

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

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

0 голосов
/ 30 августа 2011

Я не думаю, что есть какая-либо встроенная функция API для этого.

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

0 голосов
/ 01 июля 2011

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

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

Обнаружение жестов Fling на макете сетки Для некоторых основных чтений и примеров кода

...