鉴于自己的Github空空如也。近日一直在推敲做一些东西放上去,所以就决定了做一个仿知乎日报的东西,叫发现日报,我知道类似的项目已经被写烂了。。但是我觉得这是我的第一个开源项目,虽然没什么复杂的功能,但是对我来说是一个开始,还是挺有意义的。
项目地址:发现日报 喜欢的记得给个Star,当作是给我的鼓励和动力吧。
整体来说,整个项目难度是很低的,但也有学到不少的东西,下面一一解说:
- RxJava 和 RxJava+Retrofit2.0 的一些使用
- Realm 数据库的基本使用
- menu 的一些布局问题
- 仿知乎日报详情页的视差效果
就这几个问题,其实也都是非常简单的问题。
第一个问题,推荐阅读这些文章:
- 给 Android 开发者的 RxJava 详解
-
收集了RxJava常见的使用场景,例子简洁、经典、易懂
当你阅读完后,基本就会了。
第二个问题,推荐阅读官方文档:
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。