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实现循环轮播跑马灯的效果
# 往左
# 自带
# 这里面
# 的是
# 往右
# 就不
# 主程序
# 中有
# 不受
# 不动
# 自定义
# 不超过
# 只需要
# 大家多多
# 就可以
# 我的博客
# 边跑
# 大家一起分享
# 找到了
相关文章:
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
动图在线制作网站有哪些,滑动动图图集怎么做?
家庭建站与云服务器建站,如何选择更优?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
如何在景安云服务器上绑定域名并配置虚拟主机?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
c++怎么用jemalloc c++替换默认内存分配器【性能】
建站之星如何取消后台验证码生成?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
教学网站制作软件,学习*后期制作的网站有哪些?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
制作证书网站有哪些,全国城建培训中心证书查询官网?
如何通过wdcp面板快速创建网站?
建站之星3.0如何解决常见操作问题?
css网站制作参考文献有哪些,易聊怎么注册?
学校建站服务器如何选型才能满足性能需求?
如何通过免费商城建站系统源码自定义网站主题与功能?
如何用PHP快速搭建高效网站?分步指南
高防服务器:AI智能防御DDoS攻击与数据安全保障
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
如何快速搭建个人网站并优化SEO?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
TestNG的testng.xml配置文件怎么写
移民网站制作流程,怎么看加拿大移民官网?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
如何通过万网虚拟主机快速搭建网站?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
,柠檬视频怎样兑换vip?
建站主机如何安装配置?新手必看操作指南
建站之星导航配置指南:自助建站与SEO优化全解析
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
建站之星如何助力企业快速打造五合一网站?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
如何在七牛云存储上搭建网站并设置自定义域名?
代购小票制作网站有哪些,购物小票的简要说明?
如何登录建站主机?访问步骤全解析
香港网站服务器数量如何影响SEO优化效果?
如何选择美橙互联多站合一建站方案?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
建站之星价格显示格式升级,你的预算足够吗?
大同网页,大同瑞慈医院官网?
宝塔新建站点报错如何解决?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
小型网站制作HTML,*游戏网站怎么搭建?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
建站之星备案是否影响网站上线时间?
*请认真填写需求信息,我们会在24小时内与您取得联系。