Android之TextView实现跑马灯的效果(笔记)

就像有时候在京东或是淘宝客户端里的首页那样,有时候它会在上面显示一行小字,是跑马灯的样式。而且刚刚也看了imooc上有讲解,就跟着他做,然后在这里写一下笔记。

为了要让TextView实现跑马灯的效果,那么应该有两点要注意的,一个是内容要足够的长,长到在一行里不能完全的显示,另外一个就是TextView的singleLine属性要为true,这样它才不会因为内容过长而会自动回车新建一行。这是实现跑马灯效果的前提。

然后就要在TextView里增加其它几个属性:

//加入这个属性后,文字在屏幕外的部分不会显示为省略号,而是一种淡出的效果

android:ellipsize="marquee"  

//让我们的TextView的焦点为true

android:focusable="true"      

// 这个也一样是为了获取焦点,不过是根据触摸屏的特性来获取的,那么上面的是根据手机按键来获取焦点的。个中的一些比较复杂的东西,可以参考以下:View的onclick、focusable、focusableInTouchMode属性详解以及跑马灯的实现

android:focusableInTouchMode="true" 

那么这是针对只有一个TextView的情况下,那么这种写法是ok的,但如果出现了多个TextView,即使设置了相同的东西,但显示的结果是第一个TextView是可以运行的,而剩下的则不能运行。原因可能是当多个TextView存在时,即使做了相同的配置,但第一个TextView按照默认的效果它是拿到了焦点,就导致了其它的TextView不能拿到焦点,从而不能运行。

那么我们需要做的一个解决方法就是重写我们的TextView类,我们可以新建一个类继承TextView,重写它的一些方法。

public class MarqueeText extends TextView

 {

​                public MarqueeText(Context context)

           {
              super(context);
        }                                                         



​public MarqueeText(Context context, AttributeSet attrs) 

           {

​                  super(context, attrs);

​            }                                                             

​public MarqueeText(Context context, AttributeSet attrs, intdefStyleAttr)

           {

​                 super(context, attrs, defStyleAttr);

​               }

        @Override

         public boolean isFocused() 
          {​              
          return true;​               
          }
          }

那么这里的key就是最后一个方法isFocused(),我们让它返回true,也就让每个TextView都能get到焦点。当然,最后我们要把布局里的TextView改为我们的这个类:

<com.example.jdnew.marqueetext.MarqueeText

android:id="@+id/text1"

android:text="@string/hello_world"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:singleLine="true"

android:ellipsize="marquee"

android:focusable="true"

android:focusableInTouchMode="true"/>

这样就做完了跑马灯的效果,但从某种程度上来说,当我在运行的过程中,点击菜单键或是EditText等其它控件时,它的跑马灯效果会停止,回到初始状态,一旦重新获得焦点的时候,它就继续跑。但这绝对不是我们想要的完美的效果,而我现在也还不知道怎么去做,就先留个记号吧。

(待续。。。)

参考:慕课网:Android攻城狮的第二门课

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值