垂直滚动公告栏
16lz
2021-12-04
import android.content.Context;import android.graphics.Color;import android.os.Handler;import android.os.Message;import android.text.TextUtils;import android.util.AttributeSet;import android.util.TypedValue;import android.view.Gravity;import android.view.View;import android.view.animation.AccelerateInterpolator;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import android.widget.TextSwitcher;import android.widget.TextView;import android.widget.ViewSwitcher;
public class VerticalTextView extends TextSwitcher implements ViewSwitcher.ViewFactory { private static final int FLAG_START_AUTO_SCROLL = 0; private static final int FLAG_STOP_AUTO_SCROLL = 1; private float mTextSize = 16; private int mPadding = 5; private int textColor = Color.BLACK; /** * @param textSize 字号 * @param padding 内边距 * @param textColor 字体颜色 */ public void setText(float textSize, int padding, int textColor) { mTextSize = textSize; mPadding = padding; this.textColor = textColor; } private OnItemClickListener itemClickListener; private Context mContext; private int currentId = -1; private ArrayListtextList; private Handler handler; private boolean isBegin = false; public VerticalTextView(Context context) { this(context, null); } public VerticalTextView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; textList = new ArrayList (); } public void setAnimTime(long animDuration) { setFactory(this); Animation in = new TranslateAnimation(0, 0, 70, 0); in.setDuration(animDuration); in.setInterpolator(new AccelerateInterpolator()); Animation out = new TranslateAnimation(0, 0, 0, -70); out.setDuration(animDuration); out.setInterpolator(new AccelerateInterpolator()); setInAnimation(in); setOutAnimation(out); } /** * 间隔时间 */ 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; } } }; } /** * 设置数据源 * * @param titles */ public void setTextList(ArrayList titles) { textList.clear(); textList.addAll(titles); currentId = -1; }
//开始滚动
public void startAutoScroll() { if ( isBegin) { return; } isBegin = true; handler.sendEmptyMessage( FLAG_START_AUTO_SCROLL); } //停止滚动public void stopAutoScroll() { if (! isBegin){ return; } isBegin = false; handler.sendEmptyMessage( FLAG_STOP_AUTO_SCROLL); } @Override public View makeView() { TextView t = new TextView( mContext); t.setGravity(Gravity. CENTER_VERTICAL | Gravity. LEFT); t.setMaxLines( 1); t.setPadding( mPadding, 0, mPadding, 0); t.setTextColor( textColor); t.setEllipsize(TextUtils.TruncateAt. END); t.setTextSize(TypedValue. COMPLEX_UNIT_SP, mTextSize); t.setClickable( true); t.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { if ( itemClickListener != null && textList.size() > 0 && currentId != - 1) { itemClickListener.onItemClick( currentId % textList.size()); } } }); return t; } //点击事件监听 public void setOnItemClickListener(OnItemClickListener itemClickListener) { this. itemClickListener = itemClickListener; } // 轮播文本点击监听器,需要实现它 public interface OnItemClickListener { // 点击回调 void onItemClick( int position); }}
更多相关文章
- Android双向滚动ScrollView
- Android(安卓)Recyclerview 滚动事件监听
- Android(安卓)安卓使用MediaPlayer播放列表视频
- Android(安卓)可下拉上拉效果的ScrollView
- Android(安卓)Tab点击监听 自定义事件
- android 新手学习笔记 点击事件
- android 新手学习笔记 点击事件
- Android(安卓)中文 API (100) —— ScrollView
- android gridview按钮边框和定制点击颜色