Android多行公告實現(xiàn)邏輯(中獎公告,直播左下角效果)

轉(zhuǎn)載請注明原創(chuàng)出處,謝謝!

一屏多行公告實現(xiàn)邏輯(中獎公告效果,直播聊天效果,垂直滾動)

效果圖.gif

ps:最近在寫app活動抽獎,需要了一些比較有意思的需求,記錄一下。
主要實現(xiàn)中獎公告,1頁顯示多條,一條頂一條的滾動的效果。

  1. 一開始使用了viewpager,但是一屏多條實現(xiàn)起來有些困難,
  2. 后來也使用了LinearLayout使用addview的添加View,通過LayoutTransition的屬性動畫,來控制一條頂一條的效果,但是擴(kuò)展性較差。
  3. 后來想到了使用RecyclerView的LayoutManager,控制移動到指定位置,最后寫的時候發(fā)現(xiàn),BRVAH萬能適配器這個庫的添加和刪除數(shù)據(jù)時候自帶的效果就可以實現(xiàn)。只要禁止RecyclerView的手動滑動即可。
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.xiaodou.mobile.R;
import com.xiaodou.mobile.base.BaseActivity;
import com.xiaodou.mobile.ui.adapter.AAAAAdapter;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.OnClick;

public class TestActivity extends BaseActivity {
    @BindView(R.id.rv)
    RecyclerView rv;
    private ItemAdapter adapter = new ItemAdapter ();
    // 用來實現(xiàn)無限循環(huán)效果
    private int count = 0;
    // 數(shù)據(jù)
    private List<String> list = new ArrayList<>();

    @Override
    protected void onResume() {
        super.onResume();
        handler.sendEmptyMessageDelayed(1, 1000);
    }

    @Override
    protected void onPause() {
        super.onPause();
        handler.removeCallbacksAndMessages(null);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        handler.removeCallbacksAndMessages(null);
        handler = null;
    }

    @Override
    public int getLayoutRes() {
        return R.layout.dou_activity_test;
    }

    @Override
    public void afterLoadLayout(Bundle savedInstanceState) {
        rv.setLayoutManager(new LinearLayoutManager(context) {
            // 禁止手動滑動
            @Override
            public boolean canScrollVertically() {
                return false;
            }
        });
        rv.setAdapter(adapter);
    }

    // 模擬網(wǎng)絡(luò)請求
    @OnClick(R.id.btnStart)
    public void onViewClicked() {
        list = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            list.add("data" + i);
        }
        // 一屏顯示3條
        count = 3;
        // BRAVH,一定要注意new ArrayList(),否則會有數(shù)據(jù)引用問題
        adapter.setNewData(new ArrayList<>(list.subList(0, count)));
        handler.sendEmptyMessageDelayed(1, 1000);
    }

    @SuppressLint("HandlerLeak")
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            if (list == null || list.size() == 0 || count < 0) {
                return;
            }
            // 底部加一條
            adapter.addData(list.get(count++ % list.size()));
            // 頂部減一條
            adapter.remove(0);
            sendEmptyMessageDelayed(1, 1000);
        }
    };
}

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

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

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