zoukankan      html  css  js  c++  java
  • Android TextView跑马灯效果

    TextView跑马灯简单效果

       <!--简单示例-->
        <TextView
            android:text="@string/longWord"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textView1"
    
            android:ellipsize="marquee"
            android:singleLine="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
            />


    TextView跑马灯效果的几个常用属性,其中ellipsize、singleLine、focusable、focusableInTouchMode 这几个是必须的,其他可选

        <!--激活焦点-->
        android:focusable="true"
        <!--单行显示-->
        android:singleLine="true"
        <!--这里设置为超出文本后滚动显示-->
        android:ellipsize="marquee"
        <!--这个是设置滚动几次,这里是无限循环-->
        android:marqueeRepeatLimit="marquee_forever"
        <!--TouchMode模式的焦点激活-->
        android:focusableInTouchMode="true"
        <!--横向超出后是否有横向滚动条-->
        android:scrollHorizontally="true"


    效果图:

     

    这里是一个TextView跑马灯效果貌似是ok的,但是页面的布局一般都是很复杂的,有的时候一个页面可能有多个跑马灯效果,这里如果我们放置两个或者更多的TextView,那么跑马灯的效果怎么样呢?

    这里我们再来写一个TextView 看下效果, 从效果图中可以看出,两个相同的TextView,发现第一个是有跑马灯效果的,而第二个是没有的,这是什么情况呢?

    通过万能的百度,我们了解到,TextView默认是第一个获取光标,而后面TextView是没有获取到光标,而跑马灯效果是需要获取到光标的,这里我们知道原因了,那么就来扩展下TextView,让所有的

    TextView 获取到光标。

    效果图:

     

    TextView 扩展 跑马灯效果

    1、首创建一个marqueeText的java类,并且该类继承TextView

    2、marqueeText 实现TextView的三个构造函数,并且重载isFoused()方法

    /**
     * Created by Darren on 2015/2/23.
     * 设置所有的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, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        //TextView默认设置是第一个获取到的光标,
        //如果想让所有的TextView都有跑马灯效果,则让所有的TextView都获取到光标就行了
        //这里return true 就是让所有的TextView都获取到光标
        @Override
        public boolean isFocused() {
            return true;
        }
    }
    View Code


    3、在设计页面中我们把TextView改成marqueeText

    <TextView
            android:text="@string/longWord"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textView1"
    
            android:ellipsize="marquee"
            android:singleLine="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
            />
    
        <sh.geeko.marqueetext.marqueeText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/textView2"
            android:text="@string/longWord"
            android:layout_below="@id/textView1"
            android:layout_marginTop="20dp"
    
            android:ellipsize="marquee"
            android:singleLine="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
            />
    View Code

    这里我们来看下具体的实现效果:

     

    源码下载

     

  • 相关阅读:
    网页设计基础教程最最简单的一个ppt
    [转载]DIV CSS设计时IE6、IE7、FF 与兼容性有关的特性
    微软免费图书《Introducing Microsoft LINQ》翻译Chapter2.1:C# 3.0 特性(对象初始化表达式\匿名类型\查询表达式)
    asp.net3.5关于FileUpload控件的一个注意点的思考
    jQuery学习笔记:文档处理
    发布一个简单小巧的ajax操作类
    c#3.0关于JSON简单操作的实用帮助类(泛型实现)
    iBATIS.net直接执行sql语句
    c#将对象序列化为字符串和将字符串反序列化为对象
    iBATIS.net的OR映射篇
  • 原文地址:https://www.cnblogs.com/jesn/p/4298249.html
Copyright © 2011-2022 走看看