android TextView实现跑马灯效果

来源:互联网 发布:算法设计与分析课件 编辑:程序博客网 时间:2024/06/09 22:55

TextView自带了跑马灯功能,只要把它的ellipsize属性设置为marquee就可以了。但有个前提,就是TextView要处于被选中状态才能有效果,看到这,我们就很自然的自定义一个控件,写出以下代码

publicclassMarqueeTextView extendsTextView {
 
    publicMarqueeTextView(Context con) {
        super(con);
    }
 
    publicMarqueeTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    publicMarqueeTextView(Context context, AttributeSet attrs, intdefStyle) {
        super(context, attrs, defStyle);
    }
 
    @Override
    publicbooleanisFocused() {
        // TODO Auto-generated method stub
        if(getEditableText().equals(TruncateAt.MARQUEE)){
            returntrue;
        }
        returnsuper.isFocused();
    }
}
重写了isFocused方法,并进行判断,只有设置了marqueen属性的才保持选中状态,否则它就跟普通TextView一样。接下来就可以直接使用了,看下布局:

<linearlayout android:layout_height="match_parent" 
android:layout_width="match_parent" 
android:orientation="vertical" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools">
    <framelayout android:background="#39ac69" 
android:id="@+id/titlebar_layout" 
android:layout_height="wrap_content" 
android:layout_width="match_parent">
      <linearlayout android:background="#ffffff" 
android:gravity="center_vertical" 
android:layout_height="50dp" 
android:layout_width="match_parent"
android:orientation="horizontal">
 
            <imageview android:id="@+id/home_location_iv"
android:layout_height="27dp" 
android:layout_marginleft="10dp" 
android:layout_width="25dp"
android:scaletype="fitXY" 
android:src="@drawable/icon_place">
 
            <com.lxj.marqueetextview.marqueetextview
android:ellipsize="marquee" 
android:focusable="true" 
android:focusableintouchmode="true" 
android:gravity="center" 
android:id="@+id/home_location_tv" 
android:layout_height="wrap_content" 
android:layout_marginleft="10dp"
android:layout_marginright="10dp" 
android:layout_weight="1" 
android:layout_width="0dp"
android:marqueerepeatlimit="marquee_forever"
android:scrollhorizontally="true" 
android:singleline="true" <!--此处改为maxLine跑马灯效果就消失 具体原因不太清除-->
android:text="正在定位..."
android:textcolor="#39ac69" 
android:textsize="18sp">
 
            <imageview android:id="@+id/home_search_iv" 
android:layout_height="27dp" 
android:layout_marginright="10dp" 
android:layout_width="25dp" 
android:scaletype="fitXY"
android:src="@drawable/icon_place">
        </imageview>
</com.lxj.marqueetextview.marqueetextview>
</imageview>
</linearlayout>
</framelayout>
</linearlayout>


原创粉丝点击