android listview如何按时加滚动到顶部?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android listview如何按时加滚动到顶部?相关的知识,希望对你有一定的参考价值。

无论listview加载多少项,都在规定的时间之后到达顶部。

listview的一些方法:

1.public
void setSelection (int position)

position位置的item置顶(即position位置的item到listview的最顶端),但是,没有从原来位置到顶端的滑动效果。

2.public
void setSelectionFromTop (int position, int y)

与setSelection 类似。setSelection(position)就是setSelectionFromTop (position,0)

选中position指定的项目,并将所选项置于距离ListView顶端y像素的位置

参数

position 需要选中的项目的索引(从0开始)

y
距离ListView(包括间隙)顶端的位置

3.public
void smoothScrollToPositionFromTop (int position, int
offset)

平滑滚动到指定的适配器位置。 指定位置的视图会滚动到相对顶边偏移 offset 像素的位置显示。
如果无法做到(比如该偏移量会使首尾条目超越列表边缘),会滚动到尽量接近的位置。

参数

position 滚动到的位置

offset 滚动结束时,指定 position 条目距离视图顶部的像素数

当offset=0时,可以把position位置的item置顶,而且带有滑动效果,即会从原来位置轻轻滑动到最顶

端位置。

测试:
可以顺利滚动,返回滚动也很顺利,滑动顺畅

4、public void
smoothScrollToPositionFromTop(int position)

参数:

position 滚动到的位置

带有滑动效果的滚动到指定位置。

如何判断其内容已滚动到最顶部或者最底部看

getListView().setOnScrollListener(new OnScrollListener()
@Override
public void onScrollStateChanged(AbsListView view, int scrollState)


@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
if(firstVisibleItem==0)
Log.e("log", "滑到顶部");

if(visibleItemCount+firstVisibleItem==totalItemCount)
Log.e("log", "滑到底部");


);

平滑的滚动listview到一个指定位

package com.android.contacts.widget;

import android.content.Context;

import android.util.AttributeSet;

import android.widget.ListView;

public class AutoScrollListView extends ListView

private static final
float PREFERRED_SELECTION_OFFSET_FROM_TOP = 0.33f;

private int
mRequestedScrollPosition = -1;

private boolean
mSmoothScrollRequested;

public
AutoScrollListView(Context context)

super(context);



public
AutoScrollListView(Context context, AttributeSet attrs)

super(context, attrs);



public
AutoScrollListView(Context context, AttributeSet attrs, int
defStyle)

super(context, attrs, defStyle);



public void
requestPositionToScreen(int position, boolean smoothScroll)

mRequestedScrollPosition = position;

mSmoothScrollRequested = smoothScroll;

requestLayout();



@Override

protected void
layoutChildren()

super.layoutChildren();

if (mRequestedScrollPosition == -1)

return;



final int position =
mRequestedScrollPosition;

mRequestedScrollPosition = -1;

int firstPosition = getFirstVisiblePosition() +
1;

int lastPosition =
getLastVisiblePosition();

if (position >= firstPosition &&
position <= lastPosition)

return; //
Already on screen



final int offset = (int) (getHeight() *
PREFERRED_SELECTION_OFFSET_FROM_TOP);

if (!mSmoothScrollRequested)

setSelectionFromTop(position, offset);

// Since
we have changed the scrolling position, we need to redo child
layout

// Calling
"requestLayout" in the middle of a layout pass has no effect,

// so we
call layoutChildren explicitly

super.layoutChildren();

else

// We will
first position the list a couple of screens before or after

// the new
selection and then scroll smoothly to it.

int
twoScreens = (lastPosition - firstPosition) * 2;

int
preliminaryPosition;

if
(position < firstPosition)

preliminaryPosition = position + twoScreens;

if (preliminaryPosition >=
getCount())

preliminaryPosition = getCount() - 1;



if (preliminaryPosition <
firstPosition)

setSelection(preliminaryPosition);

super.layoutChildren();



else


preliminaryPosition =
position - twoScreens;

if (preliminaryPosition <
0)

preliminaryPosition = 0;



if
(preliminaryPosition > lastPosition)

setSelection(preliminaryPosition);

super.layoutChildren();





smoothScrollToPositionFromTop(position, offset);





参考技术A listview可以设置显示在第一行的Item的ID 参考技术B 1.public
void setSelection (int position)

position位置的item置顶(即position位置的item到listview的最顶端),但是,没有从原来位置到顶端的滑动效果。

2.public
void setSelectionFromTop (int position, int y)

与setSelection 类似。setSelection(position)就是setSelectionFromTop (position,0)

选中position指定的项目,并将所选项置于距离ListView顶端y像素的位置

参数
参考技术C listView.setSelection(0)可以直接跳到顶部
listView.smoothScrollToPosition(0)可以平滑滚动到顶部
如果你需要平滑滚动的动画效果同时又要满足时间要求,则需要自己写一个继承ListView的类,重写smoothScrollToPosition(int position)方法,自己计算滚动的速度追问

试了一下,还是不行。有没有demo?谢谢啊

参考技术D 你知道写一个定时器,到规定的时间,把Listview setSelection(0)或者直接滚动到顶部

解决RecyclerView&ListView滚动到顶部或者底部边界出现阴影问题

问题复现

RecyclerView&ListView解决办法

设置滑动到边缘时无效果模式: android:overScrollMode="never" 就是这么简单。


    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_piggy"
        android:layout_width="match_parent"
        android:layout_height="366dp"
        android:overScrollMode="never"/>

    <ListView
        android:id="@+id/lv_piggy"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:overScrollMode="never"/>
        

以上是关于android listview如何按时加滚动到顶部?的主要内容,如果未能解决你的问题,请参考以下文章

当 EditText 增长时 ListView 滚动到顶部

ListView 更新后滚动到顶部

Listview在颤动中强制滚动到顶部

Flutter ListView.builder在滚动时结结巴巴并跳到顶部[重复]

如何使ListView滑动到指定的item的位置

Android ListView拉到顶/底部,像橡皮筋一样弹性回弹复位