周期循環(huán)定時(shí)取隨機(jī)list+文本刷新+屬性動(dòng)畫(huà)效果實(shí)現(xiàn)

效果

  • 每5秒從源list荠耽,即下文dataList中隨機(jī)選取指定條目的不重復(fù)數(shù)據(jù)追逮;
  • Handler輪詢(xún)周期執(zhí)行上述操作逊桦;
  • 在UI線(xiàn)程更新UI操作泣栈;
  • 每次更新文本信息增加切換文本淡入淡出動(dòng)畫(huà)效果卜高,多控件保證同進(jìn)同出。

核心代碼

public class MainActivity extends AppCompatActivity {

    private LinearLayout hintView;
    private TextView textViewFront;
    private TextView textViewBehind;

    /**
     * 周期循環(huán)
     */
    private Handler voiceBarHintHandler;
    private Runnable voiceBarHintRunnable;

    /**
     * 模擬數(shù)據(jù)源
     */
    private List<String> dataList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        dataList = new ArrayList<>();
        initDataList();
        voiceBarHintRunnable = new MyRunnable<String>(dataList);
        voiceBarHintHandler.removeCallbacksAndMessages(voiceBarHintRunnable); //null是清除詞handler之前所有的消息
        voiceBarHintHandler.postDelayed(voiceBarHintRunnable,0);  //這里的delay是指首次顯示延遲時(shí)間南片。
    }

    private void initView(){
       hintView = findViewById(R.id.hintView);
       textViewFront = findViewById(R.id.textViewFront);
       textViewBehind = findViewById(R.id.textViewBehind);
       voiceBarHintHandler = new Handler(this.getMainLooper());
    }

    private void initDataList(){
        dataList.add("李華");
        dataList.add("撒 凡爾賽 貝寧");
        dataList.add("李思思");
        dataList.add("易烊千璽");
    }

    class MyRunnable<T> implements Runnable{

        private final List<T> list;

        public MyRunnable(List<T> dataList) {
            list = dataList;
        }

        @Override
        public void run() {
            if (list == null || list.isEmpty()) {
                return;
            }
            T itemType = list.get(0);
            if (itemType instanceof String) {
                List<T> randomList = getRandomList(list, 2);  //從源list中選取兩條隨機(jī)并且不重復(fù)的數(shù)據(jù)

                startValueAnimator(hintView);
                for (int i = 0; i < randomList.size(); i++) {
                    String item = randomList.get(i).toString();
                    if (i == 0) {
                        textViewFront.setVisibility(View.VISIBLE);
                        textViewFront.setText("你好篙悯,"+ item);
                    } else if (i == 1) {
                        textViewBehind.setVisibility(View.VISIBLE);
                        textViewBehind.setText("你好," + item);
                    } else {
                    }
                }
            }
            voiceBarHintHandler.postDelayed(this, 5000); //這里的delay才是每次切換的真正delay時(shí)間铃绒。
        }

        /**
         * 從一個(gè)List中隨機(jī)選取兩條不重復(fù)的數(shù)據(jù)并將結(jié)果返回為一個(gè)新的List
         *
         * @param list 待選取的list集合
         * @param count  所選取的個(gè)數(shù)
         * @return randomList 篩選好的結(jié)果集
         */
        public List<T> getRandomList(List<T> list, int count) {
            if (list.size() <= count) {
                return list;
            } else {
                Random random = new Random();
                List<Integer> tempList = new ArrayList<Integer>();
                List<T> randomList = new ArrayList<T>();
                int temp = 0;
                for(int i = 0; i<count ; i++){
                    temp = random.nextInt(list.size() -1);  //將產(chǎn)生的隨機(jī)數(shù)作為被抽list的索引
                    if (!tempList.contains(temp)){
                        tempList.add(temp);
                        randomList.add(list.get(temp));
                    }else {
                        i--;
                    }
                }
                return randomList;
            }
        }
    }

    /**
     * 開(kāi)啟屬性動(dòng)畫(huà)
     */
    private void startValueAnimator(View view){
        ObjectAnimator animator = ObjectAnimator.ofFloat(view,"alpha",1.0F,0.0F,1.0F);
        animator.setDuration(300);
        animator.setStartDelay(4850);
        animator.start();
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/hintView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="horizontal"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textViewFront"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/design_default_color_primary"
        android:padding="4dp"
        android:textColor="@color/white"
        android:textSize="18sp"
        android:visibility="gone" />

    <TextView
        android:id="@+id/textViewBehind"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:background="@color/design_default_color_primary"
        android:padding="4dp"
        android:textColor="@color/white"
        android:textSize="18sp"
        android:visibility="gone" />

</LinearLayout>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸽照,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子颠悬,更是在濱河造成了極大的恐慌矮燎,老刑警劉巖定血,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異诞外,居然都是意外死亡澜沟,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)峡谊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)茫虽,“玉大人,你說(shuō)我怎么就攤上這事既们”粑觯” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵啥纸,是天一觀的道長(zhǎng)号杏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)斯棒,這世上最難降的妖魔是什么盾致? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮荣暮,結(jié)果婚禮上庭惜,老公的妹妹穿的比我還像新娘。我一直安慰自己穗酥,他們只是感情好护赊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著迷扇,像睡著了一般百揭。 火紅的嫁衣襯著肌膚如雪爽哎。 梳的紋絲不亂的頭發(fā)上蜓席,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音课锌,去河邊找鬼厨内。 笑死,一個(gè)胖子當(dāng)著我的面吹牛渺贤,可吹牛的內(nèi)容都是我干的雏胃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼志鞍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瞭亮!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起固棚,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤统翩,失蹤者是張志新(化名)和其女友劉穎仙蚜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體厂汗,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡委粉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娶桦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贾节。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖衷畦,靈堂內(nèi)的尸體忽然破棺而出栗涂,到底是詐尸還是另有隱情,我是刑警寧澤霎匈,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布戴差,位于F島的核電站,受9級(jí)特大地震影響铛嘱,放射性物質(zhì)發(fā)生泄漏暖释。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一墨吓、第九天 我趴在偏房一處隱蔽的房頂上張望球匕。 院中可真熱鬧,春花似錦帖烘、人聲如沸亮曹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)照卦。三九已至,卻和暖如春乡摹,著一層夾襖步出監(jiān)牢的瞬間役耕,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工聪廉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞬痘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓板熊,卻偏偏與公主長(zhǎng)得像框全,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子干签,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你津辩,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,712評(píng)論 2 59
  • 對(duì)于android手機(jī)上的動(dòng)畫(huà)實(shí)現(xiàn)主要有三種,一種是幀動(dòng)畫(huà)喘沿,一種是View動(dòng)畫(huà)情萤,以及3.0以上提供的屬性動(dòng)畫(huà),所有...
    查理吃西瓜閱讀 6,524評(píng)論 1 39
  • 前端工程師快速入門(mén) 概述 前端開(kāi)發(fā)工程師是Web前端開(kāi)發(fā)工程師的簡(jiǎn)稱(chēng)摹恨,2007年才真正開(kāi)始受到重視的一個(gè)新興職業(yè)筋岛。...
    進(jìn)擊的大東閱讀 585評(píng)論 0 0
  • 一、簡(jiǎn)介 <<UITableView(或簡(jiǎn)單地說(shuō)晒哄,表視圖)的一個(gè)實(shí)例是用于顯示和編輯分層列出的信息的一種手段 <<...
    無(wú)邪8閱讀 10,602評(píng)論 3 3
  • 資料來(lái)源:http://www.reibang.com/p/916b2f8e1456 Activity Acti...
    百度不清閱讀 392評(píng)論 0 0