第一個(gè)開源項(xiàng)目

鑒于自己的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ì)和動力吧。

icon
icon

整體來說,整個(gè)項(xiàng)目難度是很低的,但也有學(xué)到不少的東西,下面一一解說:

  1. RxJava 和 RxJava+Retrofit2.0 的一些使用
  2. Realm 數(shù)據(jù)庫的基本使用
  3. menu 的一些布局問題
  4. 仿知乎日報(bào)詳情頁的視差效果

就這幾個(gè)問題,其實(shí)也都是非常簡單的問題。
第一個(gè)問題,推薦閱讀這些文章:

第二個(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。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容