Подтвердить что ты не робот

Android: переключение Listview на scrollview

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

4b9b3361

Ответ 1

При взгляде на вещи в API ScrollView вы должны переопределить метод onOverScrolled(), если вы создадите пользовательское представление, которое расширяет класс ScrollView. После выполнения быстрого поиска Google я наткнулся на эту ссылку, и похоже, что это то, что вы пытаетесь сделать... Я верю, что этот метод был добавлен в Android 2.3.1, поэтому вы будете ограничены устройствами, использующими это.

Ответ 2

Добавить эффект отказов в listview в android

Шаг 1: создайте новый файл BounceListView в пакете com.base.view

public class BounceListView extends ListView
{
    private static final int MAX_Y_OVERSCROLL_DISTANCE = 200;

    private Context mContext;
    private int mMaxYOverscrollDistance;

    public BounceListView(Context context) 
    {
        super(context);
        mContext = context;
        initBounceListView();
    }

    public BounceListView(Context context, AttributeSet attrs) 
    {
        super(context, attrs);
        mContext = context;
        initBounceListView();
    }

    public BounceListView(Context context, AttributeSet attrs, int defStyle) 
    {
        super(context, attrs, defStyle);
        mContext = context;
        initBounceListView();
    }

    private void initBounceListView()
    {
        //get the density of the screen and do some maths with it on the max overscroll distance
        //variable so that you get similar behaviors no matter what the screen size

        final DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
            final float density = metrics.density;

        mMaxYOverscrollDistance = (int) (density * MAX_Y_OVERSCROLL_DISTANCE);
    }

    @Override
    protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) 
    { 
        //This is where the magic happens, we have replaced the incoming maxOverScrollY with our own custom variable mMaxYOverscrollDistance; 
        return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, mMaxYOverscrollDistance, isTouchEvent);  
    }

}

Шаг 2: На вашем макете измените

<ListView 
   android:id="@+id/list"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
/>

to

<com.base.view.BounceListView 
   android:id="@+id/list"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
/>

Ответ 4

У вас, вероятно, есть настроенное устройство Samsung. Вы должны знать, что эффект отскока не является поведением Android OS по умолчанию, это что-то внедрило в Samsung (и оно плохо реализовано, они должны были привести к тому, что ScrollView ведут себя одинаково). Поддержка Overscroll была представлена ​​в Android 2.3, и поведение по умолчанию не подпрыгивает, вместо этого это свечение света с интенсивностью, прямо пропорциональной скорости прокрутки/ "силы". И он работает везде (списки, прокрутки, веб-просмотры и т.д.).

В заключение вы не должны беспокоиться об этом. Нет простого аргумента в том, что вы можете перейти к ScrollView, чтобы сделать так, чтобы он прокручивался. И пройти через все проблемы с расширением класса ScrollView не стоит, ИМО. Просто полагайтесь на поведение по умолчанию.

Если Samsung хочет общаться со своими пользователями и дать им непоследовательный интерфейс, то пусть будет так.

Ответ 5

Для тех, кто хочет реализовать эффект отскока на ListView.

Howto

одним из способов добавления этого эффекта является использование addHeaderView и addFooterView в ListView, а их отступы (topPadding для заголовка и bottomPadding для просмотра нижнего колонтитула) установлены на 0 для первый раз, затем мы переопределяем onTouchEvent и изменяем заполнение в соответствии с расстоянием перемещения.

Реализация

Пример кода

Примечания

Идея взята из android-pulltorefresh, так как эффект отскока более прост, чем pull-to-refresh, поэтому код также короче, ^ _ ^

Надеюсь, это поможет кому-то.