android的textview自带跑马灯效果,一般使用足够了。不过也有不一般的情况,所以我实现了一个自定义textview控件,用来针对这种不一般情况下的跑马灯效果实现。

import android.content.Context;import android.util.AttributeSet;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;import android.view.GestureDetector.OnGestureListener;import android.view.View.OnTouchListener;import android.widget.TextView;/** * 自定义跑马灯文本框,支持拖拽查看文本内容,点击暂停文字 先设置要显示文本,然后调用Start()方法运行跑马灯 *  * @author sy */public class MarqueeTextView extends TextView implements Runnable,OnTouchListener {public MarqueeTextView(Context context) {super(context);}/** 是否停止滚动 */private boolean mStopMarquee;private String mText;public int mCoordinateX;int xOffset;private int mTextWidth;GestureDetector gestureDetector;public MarqueeTextView(Context context, AttributeSet attrs) {super(context, attrs);}public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}/** * 开始滚动 *  * @param text */public void Start() {this.setOnTouchListener(this);gestureDetector = new GestureDetector(getContext(),new OnGestureListener() {@Overridepublic boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {mCoordinateX += (int) distanceX;scrollTo(mCoordinateX, 0);// TODO:设置偏移量,distanceX为滑动距离return true;}@Overridepublic void onLongPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2,float velocityX, float velocityY) {return false;}@Overridepublic boolean onDown(MotionEvent e) {// TODO Auto-generated method stubreturn false;}});xOffset = 0;mStopMarquee = false;mText = this.getText().toString();// 获取文本框文本mCoordinateX = 0;mTextWidth = (int) Math.abs(getPaint().measureText(mText));post(this);}@Overridepublic void run() {if (!mStopMarquee) {mCoordinateX += 3;// 滚动速度scrollTo(mCoordinateX, 0);if (mCoordinateX > mTextWidth) {scrollTo(0, 0);mCoordinateX = 0;}postDelayed(this, 50);}}// 继续滚动public void Continue() {if (mStopMarquee) {mStopMarquee = false;post(this);}}// 暂停滚动public void Paush() {mStopMarquee = true;}@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:case MotionEvent.ACTION_MOVE:case MotionEvent.ACTION_SCROLL:Paush();break;default:Continue();break;}gestureDetector.onTouchEvent(event);return true;}} 

  首先调用setText设置文本内容,然后调用start()开始滚动。滚动速度为每50毫米移动3像素,这是我调试之后感觉比较平滑的一个速度。如果代码有什么错误或者可以改进的地方,希望你们能在评论中指出。谢谢!

更多相关文章

  1. android 存储联系人(save contact) 总结
  2. android对话框大全
  3. Android梳理 Fragment
  4. Android(安卓)Audio
  5. Android(安卓)jni调用,实现自己的JNI_OnLoad函数
  6. Native+WebApp中Phonegap调用Android(安卓)Activity
  7. android异步的几种方式
  8. Android(安卓)MD5加密算法
  9. Android(安卓)LCD和键盘 背光亮度设置

随机推荐

  1. Android(安卓)VideoView设置静音,Android
  2. android:scrollbarStyle属性及滚动条和分
  3. Android(安卓)XML文件解析
  4. RK3326 Android(安卓)8.1 为自己的APK的
  5. Android(安卓)Studio在Gradle中隐藏Keyst
  6. Android中做一个无标题窗口
  7. Android笔记--handler机制
  8. Android定时器的使用,
  9. 创建 cocos2d-x+lua for android 步骤
  10. 用网络adb连接调试Android