垂直滚动公告栏

来源:互联网 发布:科比各项数据 编辑:程序博客网 时间:2024/05/18 03:50
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 ArrayList<String> textList;    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<String>();    }    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<String> 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); }}
原创粉丝点击