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

android listview如何按时加滚动到顶部,第1张

listview的一些方法:

1public

void setSelection (int position)

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

2public

void setSelectionFromTop (int position, int y)

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

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

参数

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

y

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

3public

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){

Loge("log", "滑到顶部");

}

if(visibleItemCount+firstVisibleItem==totalItemCount){

Loge("log", "滑到底部");

}

}

});

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

package comandroidcontactswidget;

import androidcontentContext;

import androidutilAttributeSet;

import androidwidgetListView;

public class AutoScrollListView extends ListView {

private static final

float PREFERRED_SELECTION_OFFSET_FROM_TOP = 033f;

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() {

superlayoutChildren();

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

superlayoutChildren();

} 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);

superlayoutChildren();

}

} else

{

preliminaryPosition =

position - twoScreens;

if (preliminaryPosition <

0) {

preliminaryPosition = 0;

}

if

(preliminaryPosition > lastPosition) {

setSelection(preliminaryPosition);

superlayoutChildren();

}

}

smoothScrollToPositionFromTop(position, offset);

}

}

}

ListView的Adapter中getView方法是在每个Item项显示的时候调用的,手机屏幕上没有显示的Item就是还没有调用getView方法,在滑动的时候可以看看调用了几次getView,应该还可以获取到每个Item项的高度,计算下应该可以知道这个距离的

mListViewsmoothScrollToPosition(int移动的位置);mListViewsmoothScrollToPosition(0);//移动到首部mListViewsmoothScrollToPosition(listViewgetCount()-1);//移动到尾部

以上就是关于android listview如何按时加滚动到顶部全部的内容,包括:android listview如何按时加滚动到顶部、有没有大神知道如何计算ListView滑动的距离的、如何获得ListView当前的滚动速度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10217689.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存