本文将实现标题栏下面的textview中的文字跑马灯的效果,就是将一行文字水平循环滚动,效果如下:

Android手机卫士(十一):自定义控件(获取焦点的TextView)

  实现代码如下:

XML/HTML代码
  1. <!-- android:ellipsize="end"添加省略点的所在位置 -->  
  2. <!-- 想让文字出现跑马灯效果,必须让其获取焦点 -->  
  3. <!-- android:marqueeRepeatLimit="marquee_forever"一直滚动属性 -->  
  4. <!-- 自定义控件达到滚动效果(其实就是重新原有的TextView,让其一直能够获取焦点即可) -->  
  5. <TextView   
  6.     android:text="这是一个跑马灯,这是一个跑马灯,这是一个跑马灯,这是一个跑马灯,这是一个跑马灯,"  
  7.     android:layout_width="match_parent"  
  8.     android:layout_height="wrap_content"  
  9.     android:ellipsize="marquee"  
  10.     android:focusable="true"  
  11.     android:focusableInTouchMode="true"  
  12.     android:marqueeRepeatLimit="marquee_forever"  
  13.     android:padding="5dp"  
  14.     android:textColor="#000"  
  15.     android:singleLine="true"  
  16.     />  

  如果其他地方也需要这样的跑马灯效果,复制代码比较麻烦。这里使用自定义控件来实现滚动效果(其实就是重新原有的TextView,让其一直能够获取焦点即可)

  新建一个包view,专门放自定义控件文件

Android手机卫士(十一):自定义控件(获取焦点的TextView)

  新建FocusTextView类

Android手机卫士(十一):自定义控件(获取焦点的TextView)

  添加代码:

Java代码
  1. package com.wuyudong.mobilesafe.view;  
  2.   
  3. import android.content.Context;  
  4. import android.util.AttributeSet;  
  5. import android.widget.TextView;  
  6.   
  7. /** 
  8.  * @author wuyudong  
  9.  * 能够获取焦点的自定义TextView 
  10.  *  
  11.  */  
  12. public class FocusTextView extends TextView {  
  13.   
  14.     // 使用在通过java代码创建控件  
  15.     public FocusTextView(Context context) {  
  16.   
  17.         super(context);  
  18.     }  
  19.   
  20.     // 由系统调用(带属性+上下文环境构造方法)  
  21.     public FocusTextView(Context context, AttributeSet attrs) {  
  22.   
  23.         super(context, attrs);  
  24.     }  
  25.   
  26.     // 由系统调用(带属性+上下文环境构造方法+布局文件中定义样式文件构造方法)  
  27.     public FocusTextView(Context context, AttributeSet attrs, int defStyle) {  
  28.         super(context, attrs, defStyle);  
  29.     }  
  30.   
  31.     // 重写获取焦点的方法  
  32.     @Override  
  33.     public boolean isFocused() {  
  34.         // return super.isFocused();  
  35.         return true;  
  36.     }  
  37. }  

  布局代码替换为:

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TextView  
  8.         style="@style/TitleStyle"  
  9.         android:text="功能列表" />  
  10.   
  11.     <!-- android:ellipsize="end"添加省略点的所在位置 -->  
  12.     <!-- 想让文字出现跑马灯效果,必须让其获取焦点 -->  
  13.     <!-- android:marqueeRepeatLimit="marquee_forever"一直滚动属性 -->  
  14.     <!-- 自定义控件达到滚动效果(其实就是重新原有的TextView,让其一直能够获取焦点即可) -->  
  15.     <!--  
  16.       <TextView   
  17.         android:text="这是一个跑马灯,这是一个跑马灯,这是一个跑马灯,这是一个跑马灯,这是一个跑马灯,"  
  18.         android:layout_width="match_parent"  
  19.         android:layout_height="wrap_content"  
  20.         android:ellipsize="marquee"  
  21.         android:focusable="true"  
  22.         android:focusableInTouchMode="true"  
  23.         android:marqueeRepeatLimit="marquee_forever"  
  24.         android:padding="5dp"  
  25.         android:textColor="#000"  
  26.         android:singleLine="true"/> -->  
  27.   
  28.     <com.wuyudong.mobilesafe.view.FocusTextView  
  29.         android:text="这是一个跑马灯,这是一个跑马灯,这是一个跑马灯,这是一个跑马灯,这是一个跑马灯,"  
  30.         android:layout_width="match_parent"  
  31.         android:layout_height="wrap_content"  
  32.         android:ellipsize="marquee"  
  33.         android:marqueeRepeatLimit="marquee_forever"  
  34.         android:padding="5dp"  
  35.         android:textColor="#000"  
  36.         android:singleLine="true">  
  37.     </com.wuyudong.mobilesafe.view.FocusTextView>  
  38.   
  39. </LinearLayout>  

  总结一下自定义控件

  自定义控件编写流程

  创建一个默认就能获取焦点的TextView

  1、创建一个类继承至TextView,FocusTextView

  2、重写其构造方法

Java代码
  1. public class FocusTextView extends TextView {  
  2.   
  3.     // 使用在通过java代码创建控件  
  4.     public FocusTextView(Context context) {  
  5.   
  6.         super(context);  
  7.     }  
  8.   
  9.     // 由系统调用(带属性+上下文环境构造方法)  
  10.     public FocusTextView(Context context, AttributeSet attrs) {  
  11.   
  12.         super(context, attrs);  
  13.     }  
  14.   
  15.     // 由系统调用(带属性+上下文环境构造方法+布局文件中定义样式文件构造方法)  
  16.     public FocusTextView(Context context, AttributeSet attrs, int defStyle) {  
  17.         super(context, attrs, defStyle);  
  18.     }  
  19.   
  20.     // 重写获取焦点的方法  
  21.     @Override  
  22.     public boolean isFocused() {  
  23.         // return super.isFocused();  
  24.         return true;  
  25.     }  
  26. }  

  3、将原有TextView上的isFocus方法默认修改为,能够获取焦点

Java代码
  1. // 重写获取焦点的方法  
  2. @Override  
  3. public boolean isFocused() {  
  4.     // return super.isFocused();  
  5.     return true;  
  6. }  

  4.使用过程

  获取当前类的全路径名称,作为xml中的标签存在,其余属性的使用方式和TextView一致

本文发布:Android开发网
本文地址:http://www.teaching4real.com/android/example/669.html
2017年4月7日
发布:鸡啄米 分类:Android开发实例 浏览: 注册送白菜网:0