• Android开发日常-listVIiew嵌套webView回显阅读位置


           详情页布局结构

    需求是回显webview展示网页的阅读位置

    方案1:

    使用webview.getScrollY()获取滑动到的位置,用setScrollY()回显设置,

    但是两个方法都出现了问题,getScrollY()时获取得到的值始终是0,由于使用的是腾讯

    的x5内核,参考x5论坛的方法使用getWebScrollY(),但获取到的值一样是0,没有找到解决方法。

    使用ScrollTo()的时候,webView在整个listView中的位置向上移动了,而且不能再滑上去了。

    这个方案只能放弃。

    方案2:

    使用listView.ScrollTo(x,y)精确定位回显

    本来以为这个方法可行,结果listView.getScrollY()获取到的值依然是0,无法记录滑动到的位置。

    ScrollTo()方法倒是可用,但也遇到了新的问题--手指触发滑动事件时会时listView又跑到最顶部去了!

    。感觉这个方案应该是可行的,就看后续怎么解决了。

                                          

     

    ---未完待续

     

     2017/04/20

    经过两天的不懈努力,就在我快要放弃跟产品说这个功能实现不了的时候,找到了最终的解决方案。

    两步实现:

    1.保存listview滚动的位置,在自定义view中实现

        private int m_nItemCount;
        private int[] m_nItemOffY;
    
        public int getListItemsHeight() {
            ListAdapter adapter =  getAdapter();
            m_nItemCount = adapter.getCount();
            int height = 0;
            int i;
    
            m_nItemOffY = new int[m_nItemCount];
    
            for (i = 0; i < m_nItemCount; ++i) {
                View view = adapter.getView(i, null, this);
    
                view.measure(MeasureSpec.makeMeasureSpec(0,         MeasureSpec.UNSPECIFIED),
                        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    
                m_nItemOffY[i] = height;
                height += view.getMeasuredHeight();
            }
    
            return height;
        }
    
        public int getListScrollY() {
            int pos, nScrollY, nItemY;
            View view;
    
            pos = getFirstVisiblePosition();
            view = getChildAt(0);
            nItemY = view.getTop();
            nScrollY = m_nItemOffY[pos] - nItemY;
    
            return nScrollY;
        }

    2.再次进入时滚动到上次保存的位置,主要是使用setSelectionFromTop()这个方法,依然是在自定义view中添加,在activity中调用

     public void scrollBy(int px){
            setSelectionFromTop(getFirstVisiblePosition() , getChildAt(0).getTop() - px);
        }

    关键是第二个参数,虽然保存的是滑动到的距离的pixel值,但是经测试,这里的第二个值应该是保存的值的负数

    看下源码中对第二个参数的解释:

    @param y The distance from the top edge of the ListView (plus padding) that the
         *        item will be positioned.

    但是为什么是负的我还是不清楚,望知道的网友告知。

    ---问题搞定,结贴!

     

     

     

     

  • 相关阅读:
    Cocos2dx隐藏iOS7状态栏】通过添加Plist Key隐藏iOS7状态栏
    数论
    Large Division(大数取余模板)
    CodeForces
    2019山东第十届acm省赛 c Wandering Robot 即zoj4115
    CF1157A. Reachable Numbers
    E. Mishap in Club (CF 245E)
    ATcoder Big Array
    CF987B
    CF1013B And
  • 原文地址:https://www.cnblogs.com/happyburglar/p/6729782.html
Copyright © 2020-2023  润新知