自定义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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月14日 17时31分04秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
其实“水”题并不水,重视“水”题
2019-04-30
HDOJ1004
2019-04-30
HDOJ-2058 The sum problem(等差数列求和)
2019-04-30
HDOJ-2046 骨牌铺方格(递推)
2019-04-30
HDOJ2045不容易系列之(3)—— LELE的RPG难题(递推)
2019-04-30
HDOJ-2031 进制转换
2019-04-30
杭电2052 Picture
2019-04-30
HDOJ 1009 FatMouse' Trade 贪心算法
2019-04-30
HDOJ 1005 Number Sequence规律题
2019-04-30
一位ACMer过来人的心得
2019-04-30
HDOJ 2057A + B Again十六进制问题
2019-04-30
HDOJ 2089 不要62(数位dp/打表)
2019-04-30
HDOJ 2091 空心三角形
2019-04-30
HDOJ 2098 分拆素数和
2019-04-30
HDOJ 1236 排名,C语言结构体版的
2019-04-30
HDOJ 2097 Sky数 进制转换的问题
2019-04-30
HDOJ 2095 Find your present (2) 异或运算
2019-04-30
HDOJ 2578 Dating with girls(1)
2019-04-30
HDOJ 2199 Can you solve this equation?
2019-04-30
uva725 - Division
2019-04-30