1. 程式人生 > 實用技巧 >Android文字上下滾動

Android文字上下滾動

一、效果圖

二、原理說明

  設定兩個textview,然後每一次滾動出現一個textview

三、關鍵程式碼

  新增資料

private void init() {
        mTextview = (AutoTextView) findViewById(R.id.textview);
        titleList = new ArrayList<>();
        titleList.add("2.4版本更新");
        titleList.add("哈哈哈哈哈哈");
        titleList.add("水水水水水水水水水水");
        mTextview.setTextList(titleList);
        mTextview.setText(25, 5, Color.RED);//設定屬性
        mTextview.setTextStillTime(3000);//設定停留時長間隔
        mTextview.setAnimTime(300);//設定進入和退出的時間間隔
        mTextview.setOnItemClickListener(new AutoTextView.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                Toast.makeText(MainActivity.this, "點選了 : " + titleList.get(position), Toast.LENGTH_SHORT).show();
            }
        });
    }

  滾動的時間間隔

public void setTextStillTime(final long time){
        handler =new Handler() {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case FLAG_START_AUTO_SCROLL:
                        if (textList.size() > 0) {
                            currentId++;
                            setText(textList.get(currentId % textList.size()));
                        }
                        handler.sendEmptyMessageDelayed(FLAG_START_AUTO_SCROLL,time);
                        break;
                    case FLAG_STOP_AUTO_SCROLL:
                        handler.removeMessages(FLAG_START_AUTO_SCROLL);
                        break;
                }
            }
        };
    }

  設定資料來源

public void setTextList(ArrayList<String> titles) {
        textList.clear();
        textList.addAll(titles);
        currentId = -1;
    }

  滾動的狀態設定

 /**
     * 開始滾動
     */
    public void startAutoScroll() {
        handler.sendEmptyMessage(FLAG_START_AUTO_SCROLL);
    }

    /**
     * 停止滾動
     */
    public void stopAutoScroll() {
        handler.sendEmptyMessage(FLAG_STOP_AUTO_SCROLL);
    }

  佈局程式碼

    主佈局程式碼

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.example.myapplication.AutoTextView
        android:id="@+id/textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

    子佈局程式碼

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv_banner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:ellipsize="end"
        android:singleLine="true"
        android:textColor="#000"
        android:textSize="12sp" />

    <TextView
        android:id="@+id/tv_banner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:ellipsize="end"
        android:singleLine="true"
        android:textColor="#f00"
        android:textSize="12sp" />
</RelativeLayout >

  優化:設定監聽世間

 /**
     * 設定點選事件監聽
     * @param itemClickListener
     */
    public void setOnItemClickListener(OnItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    /**
     * 輪播文字點選監聽器
     */
    public interface OnItemClickListener {
        /**
         * 點選回撥
         * @param position 當前點選ID
         */
        void onItemClick(int position);
    }