第一个开源项目

鉴于自己的Github空空如也。近日一直在推敲做一些东西放上去,所以就决定了做一个仿知乎日报的东西,叫发现日报,我知道类似的项目已经被写烂了。。但是我觉得这是我的第一个开源项目,虽然没什么复杂的功能,但是对我来说是一个开始,还是挺有意义的。
项目地址:发现日报 喜欢的记得给个Star,当作是给我的鼓励和动力吧。

icon
icon

整体来说,整个项目难度是很低的,但也有学到不少的东西,下面一一解说:

  1. RxJava 和 RxJava+Retrofit2.0 的一些使用
  2. Realm 数据库的基本使用
  3. menu 的一些布局问题
  4. 仿知乎日报详情页的视差效果

就这几个问题,其实也都是非常简单的问题。
第一个问题,推荐阅读这些文章:

第二个问题,推荐阅读官方文档:
Realm文档 相信看了之后,就没什么问题。

第三个问题:
一般来说,menu的布局分这两种:
<a href="http://upload-images.jianshu.io/upload_images/1320750-7f7e4dbfbeb5d03c.png"><img src="http://upload-images.jianshu.io/upload_images/1320750-7f7e4dbfbeb5d03c.png" width="40%"/></a>
<a href="http://upload-images.jianshu.io/upload_images/1320750-f48f8d44fae3c0a8.png"><img src="http://upload-images.jianshu.io/upload_images/1320750-f48f8d44fae3c0a8.png" width="40%"/></a>
即有三个点和无三个点,就是设置 showAsAction="always" 属性就行了,但这个属性有 android:showAsAction="always" 和 app:showAsAction="always" 两种,如果不想要三个点,那就选用 app:showAsAction="always" 才有效果,android 的是没效果的。

第四个问题:
视差效果的原理就是让View的滑动速度不一样,所以看上去就会有种视差的效果,要实现这样的效果,关键还是让View的滑动速度不一样,知乎日报上的布局,是上面一张图片,下面一个WebView,包在一个ScrollView里面,所以得重写ScrollView:

public class ParallaxScrollView extends ScrollView {

    private ScrollviewListener scrollViewListener = null;

    public ParallaxScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public ParallaxScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ParallaxScrollView(Context context) {
        super(context);
    }

    @Override
    public void computeScroll() {
        super.computeScroll();
    }

    @Override
    public void fling(int velocityY) {
        super.fling(velocityY);
    }

    public void setScrollViewListener(ScrollviewListener scrollViewListener) {
        this.scrollViewListener = scrollViewListener;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        if (scrollViewListener != null) {
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
        }
    }

    public interface ScrollviewListener {
        void onScrollChanged(ParallaxScrollView scrollView, int x, int y, int oldx, int oldy);
    }
}

就是暴露一个接口给 onScrollChanged 方法,然后使用:

  mParallaxScrollView.setScrollViewListener((scrollView, x, y, oldx, oldy) -> {
            top_layout.scrollTo(x, -y / 3);
        });

top_layout 就是头部的布局,至于原来,我想看过代码后都明白了吧。

最后,这个项目会慢慢再更新一些新功能,有问题和建议记得提 Issues。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容