自定义TextView实现跑马灯效果
发布日期:2021-06-30 11:22:32 浏览次数:2 分类:技术文章

本文共 2772 字,大约阅读时间需要 9 分钟。

mainActivity如下:

package c.x;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {    private Button mStartbButton;    private Button mPauseButton;    private Button mRestartbButton;    private MarqueeText mMarqueeText;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        init();    }   private void init(){	   mMarqueeText=(MarqueeText) findViewById(R.id.marqueeText);	   mStartbButton=(Button) findViewById(R.id.start_Button);	   mStartbButton.setOnClickListener(new OnClickListener() {		public void onClick(View v) {       		mMarqueeText.startScroll();			}	   });	   mPauseButton=(Button) findViewById(R.id.pause_Button);	   mPauseButton.setOnClickListener(new OnClickListener() {				public void onClick(View v) {			mMarqueeText.pauseScroll();					}	   });	  mRestartbButton=(Button) findViewById(R.id.restart_Button);	  mRestartbButton.setOnClickListener(new OnClickListener() {		public void onClick(View v) {			mMarqueeText.restartScroll();		}	  });   }  }

MarqueeText如下:

package c.x;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;import android.widget.TextView;/** * 需求描述: * TextView跑马灯的实现 *  * 实现原理: * 通过不断的scrollTo()显示View中不同坐标处的内容 *  *遇到的问题 *1 注意scrollTo(int x, int y) *  移动View中内容,比如此处TextView中的文字. *  x the x position to scroll to *  y the y position to scroll to *   *2 scrollTo(int x, int y)的坐标问题 *  参考资料: *  http://www.open-open.com/lib/view/open1328834050046.html *  个人理解: *  该坐标为View中的内容的坐标.该坐标的起始点虽然在内容的左上角 *  但是Y轴的正向是竖直向上的,X轴水平向右. *  该理解待于进一步验证. *   */public class MarqueeText extends TextView implements Runnable {	private int contentWidth=0;	private int scrollToX=0;	private boolean isStop=false;	private boolean isRun=true;	private boolean isMeasureContentWidth=false;	public MarqueeText(Context context, AttributeSet attrs) {		super(context, attrs);	}	@Override	protected void onDraw(Canvas canvas) {		super.onDraw(canvas);		if (!isMeasureContentWidth) {			//获取文字长度			Paint paint=this.getPaint();			String content=this.getText().toString();			contentWidth=(int) paint.measureText(content);			isMeasureContentWidth=true;		}	}	public void run() {		if (isRun) {			if (scrollToX>=contentWidth) {				//重新开始				scrollToX=-150;			}	        scrollTo(scrollToX, 0);	        scrollToX=scrollToX+5;	        postDelayed(this, 150);		}			}	// 点击开始,执行线程	public void startScroll() {		post(this);	}	// 点击暂停	public void pauseScroll() {		isRun=false;	}	// 点击重新开始	public void restartScroll() {		isRun=true;		scrollToX=0;		startScroll();	}}

main.xml如下:

 

转载地址:https://it9527.blog.csdn.net/article/details/8504931 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:博客中知识点梳理
下一篇:利用SurfaceView预览,拍照且保存至相册

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月14日 17时31分04秒