鑒于自己的Github空空如也。近日一直在推敲做一些東西放上去,所以就決定了做一個(gè)仿知乎日報(bào)的東西,叫發(fā)現(xiàn)日報(bào),我知道類似的項(xiàng)目已經(jīng)被寫爛了。。但是我覺得這是我的第一個(gè)開源項(xiàng)目,雖然沒什么復(fù)雜的功能,但是對我來說是一個(gè)開始,還是挺有意義的。
項(xiàng)目地址:發(fā)現(xiàn)日報(bào) 喜歡的記得給個(gè)Star,當(dāng)作是給我的鼓勵(lì)和動力吧。

整體來說,整個(gè)項(xiàng)目難度是很低的,但也有學(xué)到不少的東西,下面一一解說:
- RxJava 和 RxJava+Retrofit2.0 的一些使用
- Realm 數(shù)據(jù)庫的基本使用
- menu 的一些布局問題
- 仿知乎日報(bào)詳情頁的視差效果
就這幾個(gè)問題,其實(shí)也都是非常簡單的問題。
第一個(gè)問題,推薦閱讀這些文章:
- 給 Android 開發(fā)者的 RxJava 詳解
-
收集了RxJava常見的使用場景,例子簡潔、經(jīng)典、易懂
當(dāng)你閱讀完后,基本就會了。
第二個(gè)問題,推薦閱讀官方文檔:
Realm文檔 相信看了之后,就沒什么問題。
第三個(gè)問題:
一般來說,menu的布局分這兩種:
<a ><img src="http://upload-images.jianshu.io/upload_images/1320750-7f7e4dbfbeb5d03c.png" width="40%"/></a>
<a ><img src="http://upload-images.jianshu.io/upload_images/1320750-f48f8d44fae3c0a8.png" width="40%"/></a>
即有三個(gè)點(diǎn)和無三個(gè)點(diǎn),就是設(shè)置 showAsAction="always" 屬性就行了,但這個(gè)屬性有 android:showAsAction="always" 和 app:showAsAction="always" 兩種,如果不想要三個(gè)點(diǎn),那就選用 app:showAsAction="always" 才有效果,android 的是沒效果的。
第四個(gè)問題:
視差效果的原理就是讓View的滑動速度不一樣,所以看上去就會有種視差的效果,要實(shí)現(xiàn)這樣的效果,關(guān)鍵還是讓View的滑動速度不一樣,知乎日報(bào)上的布局,是上面一張圖片,下面一個(gè)WebView,包在一個(gè)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);
}
}
就是暴露一個(gè)接口給 onScrollChanged 方法,然后使用:
mParallaxScrollView.setScrollViewListener((scrollView, x, y, oldx, oldy) -> {
top_layout.scrollTo(x, -y / 3);
});
top_layout 就是頭部的布局,至于原來,我想看過代碼后都明白了吧。

最后,這個(gè)項(xiàng)目會慢慢再更新一些新功能,有問題和建議記得提 Issues。