大胸弟,我寫了個仿商城熱門推薦的效果,快進來看看

廢話很少說,先看效果:
java

demo地址: github.com/lxykad/vert…android

首先產品需求是紅色背景的那個view的效果。最早想到的固然是世界上最大的同性交友社區GitHub,因而找到了最上面那個999跑馬燈的效果,這特麼明顯和需求不同,算了,本身擼一個吧。git

我是一個比較懶的人,首先固然是先找系統控件了,因而想用ViewFlipper來實現,直接在xml佈局裏寫上:github

<ViewFlipper
    android:id="@+id/view_flipper"
    android:layout_width="match_parent"
    android:layout_height="100dp">
</ViewFlipper>複製代碼

代碼裏幾行代碼 設置一下完事安全

mFlipper.addView(tv1);
    mFlipper.addView(tv2);
    mFlipper.addView(tv3);

    mFlipper.setInAnimation(this, R.anim.headline_in);//進入動畫
    mFlipper.setOutAnimation(this, R.anim.headline_out);//出去動畫
    mFlipper.setFlipInterval(2000);//時間
    mFlipper.startFlipping();複製代碼

因而gif圖裏中間的效果就實現了,和京東淘寶啥的熱門推薦效果同樣同樣的(ui細節本身根據需求調一下就哦了,不要在乎這些,這裏僅僅提供思路做爲參考)。bash

不過和我要的效果仍是有差距啊,我要顯示3行的,沒辦法,再換個思路吧……,用recyclerview實現,大概思路以下:服務器

一、固定三行顯示的高度,好比90dpide

二、item的高度固定爲30dp,這樣恰好顯示3行oop

三、用一個線程安全的消息隊列存放服務器推送過來的數據佈局

四、寫一個輪詢(我這裏用rxjava實現),每隔3秒去隊列查詢一次數據,若是列表數據少於3條,直接顯示。若是列表數據大於等於3條的畫,先添加一條,而後再移除第一條。

主要代碼以下:

//3秒輪詢一次消息隊列
public void startLoop() {
    Observable.interval(3, TimeUnit.SECONDS)
            .observeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<Long>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(Long value) {
                    System.out.println("loop==========:" + mQueue.size());
                    showMsg();
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });
}複製代碼

recyclerview的展現邏輯

public void showMsg() {
        if (mQueue.size() == 0) {
            return;
        }

    try {
        NewsBean bean = mQueue.take();

        if (mList.size() > 2) {
            mAdapter.addData(bean);
            mAdapter.remove(0);

        } else {
            mAdapter.addData(bean);
        }

    } catch (InterruptedException e) {
        e.printStackTrace();
    }

}複製代碼

真正實現起來很是簡單。第一次寫文章,一篇簡單的文章碼到凌晨12點多了(好尷尬),若是對你有幫助,麻煩GitHub給個start鼓勵一下,[捂臉]!

相關文章
相關標籤/搜索