本文主要是介绍Android开发之TextView文字水平滚动效果实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在网络上搜集了很多关于这方面的文章和实现方法,最终经过实践验证和部分调整,完全可用,包括不依赖焦点和选中TextView便可实现水平滚动效果。现将主要代码罗列如下,希望对看到的人有帮助。
第一步:编写MarqueeText.java类,继承自TextView
package cn.superyouth.www.itools;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")@Overrideprotected void onAttachedToWindow() {mStopMarquee = false;if (!(mText == null || mText.isEmpty()))mHandler.sendEmptyMessageDelayed(0, 2000);super.onAttachedToWindow();}@Overrideprotected void onDetachedFromWindow() {mStopMarquee = true;if (mHandler.hasMessages(0))mHandler.removeMessages(0);super.onDetachedFromWindow();}@SuppressLint("NewApi")@Overrideprotected 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() {@Overridepublic 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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/backsmall"android:orientation="vertical" ><cn.superyouth.www.itools.MarqueeTextandroid:id="@+id/textMsg" android:layout_width="fill_parent"android:layout_height="wrap_content" android:layout_marginTop="115dp" android:textColor="@android:color/black" android:lines="1"android:focusable="true"android:focusableInTouchMode="true"android:scrollHorizontally="true" android:marqueeRepeatLimit="marquee_forever" android:ellipsize="marquee" />
</LinearLayout>
第三步:编写SYIT_Index.java继承自Activity类
package cn.superyouth.www;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);}});}
}
这篇关于Android开发之TextView文字水平滚动效果实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!