android 跑马灯效果的基本实现以及自定义实现一个界面多个跑马灯效果
2016-04-06 21:07
1651 查看
前言:
我相信很多人都在实现过android的跑马灯效果,肯定也有很多人说一个界面不能实现多个跑马灯效果,其实是可以实现的,今天我们就带你实现一下。
跑马灯最简单的代码实现如下:
注意:
ellipsize=”marquee” :跑马灯效果
marqueeRepeatLimit:循环的次数
singleLine:如果不设置成单行,跑马灯也就没有了意义
至于为什么focusable设置为true,那是因为只有获得了焦点才能出现跑马灯的效果
更多的含义请参跑马灯效果的总结
下面我们就说说本文的重点,如果实现一个界面多个跑马灯效果
因为系统是通过判断当前TextView是否获得焦点来判断是否显示跑马灯效果的,但是界面上肯定只能有一个控件可以获得焦点,那么我们怎么让系统以为每个想要实现跑马灯效果的TextView都获得了焦点呢?查看源码我们就可以知道,系统是通过View 的一个叫做isFocused()方法来获得这个View是否获得焦点的,知道了这些,问题就很好解决了,我们可以通过自定义View,重写isFocused()方法来让系统误以为获得了焦点,从而显示跑马灯的效果,代码如下:
用发也比以前简单了很多,不用设置
android:focusable
android:ellipsize=
8495
”marquee”
android:focusable=”true”
android:singleLine=”true”
android:marqueeRepeatLimit=”marquee_forever”
android:focusableInTouchMode=”true”
等乱七八糟的东西。。。。。
这样就完美的解决了我们的问题,是不是很简单?
我相信很多人都在实现过android的跑马灯效果,肯定也有很多人说一个界面不能实现多个跑马灯效果,其实是可以实现的,今天我们就带你实现一下。
跑马灯最简单的代码实现如下:
<TextView android:layout_width="100px" android:layout_height="wrap_content" android:ellipsize="marquee" android:focusable="true" android:singleLine="true" android:marqueeRepeatLimit="marquee_forever" android:focusableInTouchMode="true" android:scrollHorizontally="true" android:text="马灯效果"> </TextView>
注意:
ellipsize=”marquee” :跑马灯效果
marqueeRepeatLimit:循环的次数
singleLine:如果不设置成单行,跑马灯也就没有了意义
至于为什么focusable设置为true,那是因为只有获得了焦点才能出现跑马灯的效果
更多的含义请参跑马灯效果的总结
下面我们就说说本文的重点,如果实现一个界面多个跑马灯效果
因为系统是通过判断当前TextView是否获得焦点来判断是否显示跑马灯效果的,但是界面上肯定只能有一个控件可以获得焦点,那么我们怎么让系统以为每个想要实现跑马灯效果的TextView都获得了焦点呢?查看源码我们就可以知道,系统是通过View 的一个叫做isFocused()方法来获得这个View是否获得焦点的,知道了这些,问题就很好解决了,我们可以通过自定义View,重写isFocused()方法来让系统误以为获得了焦点,从而显示跑马灯的效果,代码如下:
import android.content.Context; import android.text.TextUtils; import android.util.AttributeSet; import android.widget.TextView; public class MarqueeTextView extends TextView { public MarqueeTextView(Context context) { this(context, null); } public MarqueeTextView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { setEllipsize(TextUtils.TruncateAt.MARQUEE); setMarqueeRepeatLimit(-1); setSingleLine(); } @Override public boolean isFocused() { return true; } }
用发也比以前简单了很多,不用设置
android:focusable
android:ellipsize=
8495
”marquee”
android:focusable=”true”
android:singleLine=”true”
android:marqueeRepeatLimit=”marquee_forever”
android:focusableInTouchMode=”true”
等乱七八糟的东西。。。。。
这样就完美的解决了我们的问题,是不是很简单?
相关文章推荐
- Android 用代码实现防打扰【能够屏蔽电话和短信】
- Android实现修改状态栏颜色
- Android Scroll分析
- android基础总结
- Win7环境下搭建Android安卓开发环境(原创教程)
- Android中通知的简单使用和自定义通知样式
- 对于Android事件分发机制的总结
- Android如何修改gen下的包名
- 任务和回退栈
- Android 高质量高压缩比图像压缩
- android studio 智能提示忽略大小写
- Android应用安全开发之浅谈加密算法的坑
- android获得控件在屏幕中的绝对坐标 getLocationInWindow 和 getLocationOnScreen
- Android textView高度为0的解决方法
- 初学android开发--day02
- Android 开发艺术与探究 第三章 View的事件体系之View的基础知识
- Android Preference类中xml里属性的用法和介绍
- Android xml资源文件中@、@android:type、@*、?、@+含义和区别
- 如何查看android WebView html source
- Android 工作问题解决记录