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; 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() { /** * 此处必须这么处理,先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); }
}在布局文件中使用,在代码中添加数据即可。