您的位置:首页 > 移动开发 > Android开发

Android实现TextView走马灯效果同时自动更新显示当前时间

2016-07-14 10:51 696 查看
在项目开发中,有时候我们需要显示一个走马灯效果,简单的走马灯效果当然容易实现;

在xml文件中给TextView设置以下属性即可;

android:focusable=true;

android:focuseableInTouchMode=true

android:singleLine=true;

android:ellipsize=marquee;

marqueeRepeatLimit=marquee_forever;
//后面属性是实现无线自动滚动,根本停不下来


同时需要注意;textview的宽度以及显示内容的长度;如果控件宽度足够宽,是不会出现滚动效果的,只有当需要显示内容在一行显示不下的情况下,才会滚动;

若想只是单纯的实现走马灯显示一般文字,这样就可以了,可是问题来了!

若想显示2016年7月14日11:20:56星期四这种格式的时间实现自动滚动+自动更新时间,单纯的那个就不能实现了!

本人思路:

1;开始使用handler每隔一秒获取当前时间更新;

runnable=new Runnable() {
public void run() {
currentTime=DateUtil.getSysDate();
tvTextView.setText("更新今天的日期"+currentTime);
mHandler.postDelayed(this, 1000);
}
};
mHandler.postDelayed(runnable, 1000);
}


然而这会出现一个问题,每一秒获取一次时间,刷新Ui;这样就会导致textview的文字一直显示前面的内容,并且不能滚动效果;因为你每隔一秒设置一次texiview,就会导致界面有种抖动效果;

2;后来博主想到先获取当前时间,不进行设置texiview,只是记录下来,然后判断当前时间和上次的时间是否相同,如果不相同就设置,相同的话就不更新界面;显示之前的内容;(ps;仅方法不能让显示时间精确到秒)

runnable=new Runnable() {

public void run() {
currentTime=DateUtil.getSysDate();
if(!lastTime.equals(currentTime)){
tvTextView.setText("更新今天的日期"+currentTime);
Log.d("TAG", "lastTime"+lastTime);
}
lastTime=currentTime;
mHandler.postDelayed(this, 1000);
}
};
mHandler.postDelayed(runnable, 1000);

这样就可以实现同时兼顾走马灯效果和自动更新时间效果

存在的BUG:时间显示到年月日时分还可以,如果显示秒的话,还是会出现那个抖动效果,目前还想不出解决办法;





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: