鑒于自己的Github空空如也箱锐。近日一直在推敲做一些東西放上去辫呻,所以就決定了做一個仿知乎日報的東西躏尉,叫發(fā)現(xiàn)日報蚯根,我知道類似的項目已經(jīng)被寫爛了。胀糜。但是我覺得這是我的第一個開源項目颅拦,雖然沒什么復雜的功能,但是對我來說是一個開始僚纷,還是挺有意義的矩距。
項目地址:發(fā)現(xiàn)日報 喜歡的記得給個Star,當作是給我的鼓勵和動力吧怖竭。

整體來說锥债,整個項目難度是很低的,但也有學到不少的東西,下面一一解說:
- RxJava 和 RxJava+Retrofit2.0 的一些使用
- Realm 數(shù)據(jù)庫的基本使用
- menu 的一些布局問題
- 仿知乎日報詳情頁的視差效果
就這幾個問題哮肚,其實也都是非常簡單的問題登夫。
第一個問題,推薦閱讀這些文章:
- 給 Android 開發(fā)者的 RxJava 詳解
-
收集了RxJava常見的使用場景允趟,例子簡潔恼策、經(jīng)典、易懂
當你閱讀完后潮剪,基本就會了涣楷。
第二個問題,推薦閱讀官方文檔:
Realm文檔 相信看了之后抗碰,就沒什么問題狮斗。
第三個問題:
一般來說,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>
即有三個點和無三個點弧蝇,就是設置 showAsAction="always" 屬性就行了碳褒,但這個屬性有 android:showAsAction="always" 和 app:showAsAction="always" 兩種,如果不想要三個點看疗,那就選用 app:showAsAction="always" 才有效果沙峻,android 的是沒效果的。
第四個問題:
視差效果的原理就是讓View的滑動速度不一樣两芳,所以看上去就會有種視差的效果摔寨,要實現(xiàn)這樣的效果,關鍵還是讓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。