豎向走馬燈(支援多行或單行)-------簡單實用
阿新 • • 發佈:2018-12-31
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
}
});
第一步:在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; privateList<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() {
/**
* 此處必須這麼處理,先removeview子view,解除與父類關係,再新增進去
* 否則會報錯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);
}
}在佈局檔案中使用,在程式碼中新增資料即可。