Любой способ добавить эффект отскока ListView к регулярному scrollview? Под откатом я имею в виду эффект резиновой ленты, когда вы попадаете в нижнюю часть списка.
Android: переключение Listview на scrollview
Ответ 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"
/>
Ответ 3
Я нашел лучшую реализацию BounceListView (по лицензии LGPL). Вот он: https://github.com/Larphoid/android-Overscroll-ListView
Ответ 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, поэтому код также короче, ^ _ ^
Надеюсь, это поможет кому-то.