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:时间显示到年月日时分还可以,如果显示秒的话,还是会出现那个抖动效果,目前还想不出解决办法;
在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:时间显示到年月日时分还可以,如果显示秒的话,还是会出现那个抖动效果,目前还想不出解决办法;
相关文章推荐
- 关于Android Studio的RatingBar显示出来的星星数量与numStars设置的数量不符的问题
- Android EditText得到和失去焦点时,自定义处理内容
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android Studio import Project时出现cannot load * modules和module not specified
- android服务之启动方式
- Android最新版本开发环境搭建图文教程
- intent.setFlags方法中的参数值内涵
- Android JNI NDK初步使用详解
- android 360度图片翻转、旋转动画等待框
- Log框架之Logger
- Android获取手机的版本号等信息的代码
- android SQLite增,删,改,查
- Android咱也来玩个手机通讯录列表展示SimpleCursorAdapter
- android 仿预订日历时间选择(如去哪儿,携程时间选择)
- Android Studio如何发布APK
- android.view.InflateException:Binary XML file **:Error inflating class com.esri.android.map.MapView
- View.setId在Android studio下使用报错的解决办法
- Android下利用SharePreference存储序列化对象的方法
- Android新的surpport支持库SurpportDesign之TextInputLayout
- Android类参考---Fragment(四)