全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android自定义TextView跑马灯效果

Android自带的跑马灯效果不太好控制,还必须要满足条件才能有效果,而且速度不受控制。前面我的博客中有一篇就是用Android自带的跑马灯效果的,但是基于不同的使用效果,这里在网上找到了一个更好的方法。沿用了作者的一些方法,但是添加了更好的扩展功能,和大家一起分享。这里面有控制往左往右两个方向的实现。

1、首先是简单的布局main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:orientation="vertical" > 
 
 
  <Button 
    android:id="@+id/start" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="start" 
    android:text="开始" /> 
 
 
  <Button 
    android:id="@+id/stop" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="stop" 
    android:text="停止" /> 
 
 
  <Button 
    android:id="@+id/startfor0" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="startFromHead" 
    android:text="重置" /> 
 
 
  <com.xuhui.customrolllight.MarqueeText 
    android:id="@+id/test" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#339320" 
    android:ellipsize="marquee" 
    android:singleLine="true" 
    android:text="滚动效果,不管多少字" 
 
    android:ellipsize = "marquee" // 跑马灯效果,字数不超过就不动,超过就滚动 
    android:textColor="#000000" 
    android:textSize="20dp" > 
  </com.xuhui.customrolllight.MarqueeText> 
 
 
</LinearLayout> 

2、自定义滚动方法MarqueeText.Java

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.widget.TextView; 
 
 
public class MarqueeText extends TextView implements Runnable { 
private int currentScrollX; // 当前滚动的位置 
private boolean isStop = false; 
private int textWidth; 
private boolean isMeasure = false; 
 
 
public MarqueeText(Context context) { 
super(context); 
} 
 
 
public MarqueeText(Context context, AttributeSet attrs) { 
super(context, attrs); 
} 
 
 
public MarqueeText(Context context, AttributeSet attrs, int defStyle) { 
super(context, attrs, defStyle); 
} 
 
 
@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
// TODO Auto-generated method stub 
super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
currentScrollX = this.getWidth(); 
} 
 
 
protected void onDraw(Canvas canvas) { 
super.onDraw(canvas); 
if (!isMeasure) { 
getTextWidth();// 文字宽度只需要获取一次就可以了 
isMeasure = true; 
} 
} 
 
 
private void getTextWidth() { 
Paint paint = this.getPaint(); 
String str = this.getText().toString(); 
textWidth = (int) paint.measureText(str); 
} 
 
 
@Override 
/* 
* public void run() { currentScrollX-=2;//滚动速度.+号表示往左边- 
* scrollTo(currentScrollX,0); if(isStop){ return; } 
* if(getScrollX()<=-(this.getWidth())){ scrollTo(textWidth,0); 
* currentScrollX=textWidth; } postDelayed(this, 5); } 
*/ 
public void run() { 
currentScrollX += 2;// 滚动速度.+号表示往左边- 
scrollTo(currentScrollX, 0); 
if (isStop) { 
return; 
} 
if (getScrollX() >= (textWidth)) { 
currentScrollX = -(this.getWidth());// 当前出现的位置 
} 
postDelayed(this, 1); 
} 
/*( public void run() { 
 
 
// currentScrollX += 3;// 滚动速度.+号表示往左边- 
// scrollTo(currentScrollX, 0); 
 
 
if (textWidth>this.getWidth()) { 
currentScrollX += 3;// 滚动速度.+号表示往左边- 
scrollTo(currentScrollX, 0); 
} 
if (getScrollX() >= (textWidth)) { 
// scrollTo(this.getWidth(),0); 
currentScrollX = -(this.getWidth());// 当前出现的位置 
} 
postDelayed(this, 5); 
})这里面实现的是没有省略号的效果。文字没有超出框的长度就不滚,超出就滚*/ 
 
// 开始滚动 
public void startScroll() { 
isStop = false; 
this.removeCallbacks(this); 
post(this); 
} 
 
 
// 停止滚动 
public void stopScroll() { 
isStop = true; 
} 
 
 
// 从头开始滚动 
public void startFromHead() { 
currentScrollX = 0; 
startScroll(); 
} 
} 

上面注释掉的代码是实现文字往右边跑

3、下面是主程序MainActivity.java

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
 
 
public class MainActivity extends Activity { 
 
 
private MarqueeText test; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
test=(MarqueeText) findViewById(R.id.test); 
 
} 
public void start(View v){ 
test.startScroll(); 
} 
public void stop(View v){ 
test.stopScroll(); 
} 
public void startFromHead(View v){ 
test.startFromHead(); 
} 
} 


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # TextView  # 跑马灯  # Android实现垂直跑马灯效果  # Android自定义图文跑马灯效果  # Android实现跑马灯效果的两种简单方式  # Android自定义可控制速度的跑马灯  # Android实现循环轮播跑马灯的效果  # 往左  # 自带  # 这里面  # 的是  # 往右  # 就不  # 主程序  # 中有  # 不受  # 不动  # 自定义  # 不超过  # 只需要  # 大家多多  # 就可以  # 我的博客  # 边跑  # 大家一起分享  # 找到了 


相关文章: 深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  如何通过二级域名建站提升品牌影响力?  如何通过万网虚拟主机快速搭建网站?  如何制作网站标识牌,动态网站如何制作(教程)?  网站微信制作软件,如何制作微信链接?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  北京制作网站的公司,北京铁路集团官方网站?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  建站OpenVZ教程与优化策略:配置指南与性能提升  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  导航网站建站方案与优化指南:一站式高效搭建技巧解析  建站之星ASP如何实现CMS高效搭建与安全管理?  如何选择网络建站服务器?高效建站必看指南  建站10G流量真的够用吗?如何应对访问高峰?  广东企业建站网站优化与SEO营销核心策略指南  代刷网站制作软件,别人代刷火车票靠谱吗?  南京网站制作费用,南京远驱官方网站?  如何在七牛云存储上搭建网站并设置自定义域名?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  宝塔建站助手安装配置与建站模板使用全流程解析  香港服务器建站指南:免备案优势与SEO优化技巧全解析  招商网站制作流程,网站招商广告语?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  内网网站制作软件,内网的网站如何发布到外网?  在线制作视频网站免费,都有哪些好的动漫网站?  如何在橙子建站中快速调整背景颜色?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  ,怎么在广州志愿者网站注册?  如何配置支付宝与微信支付功能?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  建站上传速度慢?如何优化加速网站加载效率?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  建站之星如何快速生成多端适配网站?  名字制作网站免费,所有小说网站的名字?  如何在阿里云服务器自主搭建网站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何配置IIS站点权限与局域网访问?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  网站设计制作企业有哪些,抖音官网主页怎么设置?  建站之星安装后界面空白如何解决?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  建站主机选购指南与交易推荐:核心配置解析  如何快速生成ASP一键建站模板并优化安全性?  ,在苏州找工作,上哪个网站比较好?  湖南网站制作公司,湖南上善若水科技有限公司做什么的? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。