1. 程式人生 > >豎向走馬燈(支援多行或單行)-------簡單實用

豎向走馬燈(支援多行或單行)-------簡單實用

1.單行
第一步:在build中做如下操作
(1)Android{
     //在Android中增加節點repositories
            repositories {
               maven { url 'https://maven.fabric.io/public' }
       
            }
     }


(2)depedencies{
   //在depedencies 中新增
    compile 'com.github.paradoxie:AutoVerticalTextview:0.1'
   }
完成以後,build整個project


第二步:在佈局檔案中使用
      <com.paradoxie.autoscrolltextview.VerticalTextview
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
第三步:在java程式碼中使用


        tv.setTextList(arrayList);
        tv.setText(26, 5, Color.RED);//設定屬性,具體跟蹤原始碼
        tv.setTextStillTime(3000);//設定停留時長間隔
        tv.setAnimTime(300);//設定進入和退出的時間間隔
        //對單條文字的點選監聽
        tv.setOnItemClickListener(new VerticalTextview.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                // TO DO
            }
        });

完成。

2.多行

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView; import com.rtmap.demo.Utils.MyLog; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; /** * Created by 85246 on 2017/12/12. */ public class VerticalScrolledListview extends LinearLayout { private Context mContext; private
List<String> data = new ArrayList<String>(); private OnItemClickListener itemClickListener; public VerticalScrolledListview(Context context) { super(context); init(context); } public VerticalScrolledListview(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context){ mContext = context; this.setOrientation(VERTICAL); } /** * 更新文字需要在UI執行緒 */ Handler mHandler = new Handler(); Runnable mUpdateResults = new Runnable() { public void run() { traversalView(VerticalScrolledListview.this); } }; private void initTextView(){ if (data != null && data.size() != 0){ for (int i = 0;i< data.size();i++){ TextView textView = new TextView(mContext); textView.setText(data.get(i)); textView.setGravity(Gravity.CENTER_VERTICAL); textView.setTextColor(Color.BLACK); textView.setTextSize(20f); this.addView(textView); textView.setClickable(true); final int index = i;
}
            //初始化控制元件結束呼叫計時器,也就是執行滾動的程式碼
MyLog.d("data==========="+data.size());
            if (data.size()>8) {
                startTimer();
}
        }
    }

    @Override
protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
}

    /**
     * @param data
* view初始化優先於此方法
* so控制元件需要手動調動填充
*/
public void setData(List<String> data){
        this.data = data;
initTextView();
}

    public void startTimer(){
        Timer timer = new Timer();
TimerTask task = new TimerTask() {
            @Override
public void run() {
                //將資料來源重新排序
mHandler.post(mUpdateResults);
}
        };
timer.schedule(task, 5000, 5000);
}

    /**
     * 遍歷view的所有子控制元件設值,不用在建立
* @param viewGroup
*/
public void traversalView(final ViewGroup viewGroup) {
        if (viewGroup.getChildCount() != 0){
            for (int i = 0; i < viewGroup.getChildCount(); i++){
                if (i == 0){
                    mHandler.post(new Runnable() {
                        @Override
public void run() {
                            /**
                             * 此處必須這麼處理,先removeviewview,解除與父類關係,再新增進去
* 否則會報錯java.lang.IllegalStateException
                             */
TextView newView = (TextView) viewGroup.getChildAt(0);
viewGroup.removeView(viewGroup.getChildAt(0));
viewGroup.addView(newView);
}
                    });
}
            }
        }
    }

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

    /**
     * 輪播文字點選監聽器
*/
public interface OnItemClickListener {
        /**
         * @param position 當前點選ID
         */
void onItemClick(int position);
}
}
在佈局檔案中使用,在程式碼中新增資料即可。