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

android 跑马灯效果的基本实现以及自定义实现一个界面多个跑马灯效果

2016-04-06 21:07 1651 查看
前言:

   我相信很多人都在实现过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”

等乱七八糟的东西。。。。。

这样就完美的解决了我们的问题,是不是很简单?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: