Android仿今日头条详情页实现

源码地址:

Android仿今日头条详情页实现 github源码地址java

动态图git

最近项目有个需求,须要实现一个和今日头条新闻详情页同样的体验。上部分是webview来展现新闻内容,下半部分是listview来展现评论区,可无限加载更多。 起初的实现思路是 将webview放置在listview头部,看似没有什么问题,实现以后发现,webview各类奇怪的问题:黑屏,图片闪烁白屏,渲染速度慢等等问题; 将webview和listview独立放置遍没有问题;因而反编译了一下头条的实现:github

Screen Shot

从上图能够知道,实现的原理是,ViewGroup包着listview和webview实现的;因而顺着这条思路往下走。web

今日头条的代码是混淆的没法直接使用,我采用的方案是ScrollView里边嵌套了webview+listview;ide

这套方案有如下几个问题须要解决:优化

1. 解决webview在scrollview所有展开的问题。不展开的方法太过复杂,手势处理太麻烦,这里采用展开的形式
 2. 咱们知道scrollview包含的childview是没法复用了,那么首先要解决listview的复用问题;
 3. 滑动到listview和webview边界的时候,对于手势事件的交换和状态的保存。

一、webview所有展开的问题

mWebView.loadUrl(url);
        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                int w = View.MeasureSpec.makeMeasureSpec(0,
                        View.MeasureSpec.UNSPECIFIED);
                int h = View.MeasureSpec.makeMeasureSpec(0,
                        View.MeasureSpec.UNSPECIFIED);
                //从新测量
                view.measure(w, h);
                mWebViewHeight = view.getHeight();
                Log.i(TAG, "WEBVIEW高度:" + view.getHeight());
            }
        });

2和三、listview复用问题和手势切换问题

一、复用意味着不能所有展开,现将高度定为(屏幕高度-状态栏高度-标题栏高度);url

二、当scrollview滚动到底部的时候,让listview根据手势惯性fling一会,以增强体验,而后将手势交给listview;code

三、当listview滑动到底部的时候,加载更多;blog

四、当listview滑动到顶部的时候,向上滚5个像素,并将手势交给scrollview,即可向上流畅滑动;事件

五、当listview即将到达顶部的时候,手动往下拖动,当到达边界的时候,须要让scrollview跟着之前scrollby,让用户感知是一块儿滑动的,当手指松开的时候,要让scrollview惯性滚动一会,以加强体验;

遗留问题

一、scrollview和listview的内部滚动速度是不一致的,scrollview是比较大的,在scrollview滚动到底部的时候,listview采用scrollview滚动速度的三分之一进行fling,体验下来感受仍是比较流畅的。但总感受仍是不够稳妥,优化思路是:接管scrollview和listview的滚动速度,手动控制两个控件的过渡过程;

二、当listview即将到达顶部的时候,手动往下拖动,当到达边界的时候,须要让scrollview跟着之前scrollby,让用户感知是一块儿滑动的,当手指松开的时候,要让scrollview惯性滚动一会,这里的惯性也因为速度不一致的问题,形成一点点的那么不天然;优化思路和1一致;

Done

QQ:452825089

mail:452825089@qq.com

wechat:ice3897315

blog:http://iceAnson.github.io

相关文章
相关标签/搜索