| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
nnf6
10年前发布

Android实现TextView文字水平滚动效果实现

第一步:编写MarqueeText.java类,继承自TextView

import android.annotation.SuppressLint;    import android.content.Context;    import android.graphics.Canvas;    import android.os.Handler;    import android.os.Message;    import android.util.AttributeSet;    import android.widget.TextView;            public class MarqueeText extends TextView {         /** 是否停止滚动 */        private boolean mStopMarquee;        private String mText;        private float mCoordinateX;        private float mTextWidth;                public MarqueeText(Context context, AttributeSet attrs) {            super(context, attrs);        }                public void setText(String text) {            this.mText = text;            mTextWidth = getPaint().measureText(mText);            if (mHandler.hasMessages(0))                mHandler.removeMessages(0);            mHandler.sendEmptyMessageDelayed(0, 2000);        }                @SuppressLint("NewApi")        @Override        protected void onAttachedToWindow() {            mStopMarquee = false;            if (!(mText == null || mText.isEmpty()))                mHandler.sendEmptyMessageDelayed(0, 2000);            super.onAttachedToWindow();        }                @Override        protected void onDetachedFromWindow() {            mStopMarquee = true;            if (mHandler.hasMessages(0))                mHandler.removeMessages(0);            super.onDetachedFromWindow();        }                @SuppressLint("NewApi")        @Override        protected void onDraw(Canvas canvas) {            super.onDraw(canvas);            if (!(mText == null || mText.isEmpty()))                canvas.drawText(mText, mCoordinateX, 30, getPaint());        }                @SuppressLint("HandlerLeak")        private Handler mHandler = new Handler() {            @Override            public void handleMessage(Message msg) {                switch (msg.what) {                case 0:                    if (Math.abs(mCoordinateX) > (mTextWidth + 5)) {                        mCoordinateX = 0;                        invalidate();                        if (!mStopMarquee) {                            sendEmptyMessageDelayed(0,500);                        }                    } else {                        mCoordinateX -= 1;                        invalidate();                        if (!mStopMarquee) {                            sendEmptyMessageDelayed(0, 30);                        }                    }                    break;                }                super.handleMessage(msg);            }        };    }  

第二步:编写布局文件main.xml
                                  

第三步:编写SYIT_Index.java继承自Activity类
import java.io.IOException;    import cn.superyouth.www.itools.MarqueeText;    import android.annotation.SuppressLint;    import android.app.Activity;    import android.content.ComponentName;    import android.content.Intent;    import android.graphics.Color;    import android.os.AsyncTask;    import android.os.Bundle;    import android.os.Handler;    import android.os.Message;    import android.text.method.ScrollingMovementMethod;    import android.view.View;    import android.view.View.OnClickListener;    import android.widget.AdapterView;    import android.widget.GridView;    import android.widget.TextView;    import android.widget.Toast;    import android.widget.AdapterView.OnItemClickListener;            public class SYIT_Index extends Activity {        MarqueeText autoScrollTextView;                public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.main);                    autoScrollTextView = (MarqueeText) findViewById(R.id.textMsg);            autoScrollTextView.setTextSize(30);                        autoScrollTextView.setTextColor(Color.BLUE);            autoScrollTextView.setText("暂无任何预警信息!");            // 点击预警提示信息            autoScrollTextView.setOnClickListener(new OnClickListener() {                public void onClick(View arg0) {                    // 进入预警信息页面                    Intent intent = new Intent(SYIT_Index.this, SYIT_Warning.class);                    startActivity(intent);                }            });         }    }