android - ListView 捕捉到项目

标签 android listview

我正在使用 ListView 创建一个图片列表,这些照片的大小可以在屏幕上显示 2 到 3 张照片。

我遇到的问题是,当用户停止滚动时,我希望可见列表的第一个项目会捕捉到屏幕顶部,例如,如果滚动结束并且第一个项目的一小部分图片显示时,我们向下滚动列表,使图片始终完全显示,如果显示大部分图片,我们向上滚动列表,使下一张图片完全可见。

有没有办法在 android 中使用 listview 实现这一点?

最佳答案

我找到了一种方法来做到这一点,只需通过实现 ListView.OnScrollListener 来监听滚动并更改滚动结束时的位置

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
    switch (scrollState) {
    case OnScrollListener.SCROLL_STATE_IDLE:
        if (scrolling){
            // get first visible item
            View itemView = view.getChildAt(0);
            int top = Math.abs(itemView.getTop()); // top is a negative value
            int bottom = Math.abs(itemView.getBottom());
            if (top >= bottom){
                ((ListView)view).setSelectionFromTop(view.getFirstVisiblePosition()+1, 0);
            } else {
                ((ListView)view).setSelectionFromTop(view.getFirstVisiblePosition(), 0);
            }
        }
        scrolling = false;
        break;
    case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
    case OnScrollListener.SCROLL_STATE_FLING:
        Log.i("TEST", "SCROLLING");
        scrolling = true;
        break;
    }
}

变化不是那么顺利,但它确实有效。

关于android - ListView 捕捉到项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4432261/

相关文章:

java - Realm 查询 : do I need to reassign the result of a query operator to the query object every time?

android - 在哪里可以找到或下载 USB 驱动程序文件夹?

java - 将项目添加到 Android LinearLayout 的顶部

android - 更新 CheckBox 项的 ListView 时,是更新单个 View 更好,还是更新 notifyDataSetChanged() 和 invalidateViews()?

android - 从另一个 fragment 中的按钮开始 fragment

java - 如何使用特定联系人从其他应用程序打开 Whatsapp?

java - 在后台跟踪网页

php - 限制在用户加载时从数据库获取数据(分页)

android - 在 Android 中水平和垂直滚动 ListView

java - 扩展 ListActivity 时 ActionBar 不工作