转自:http://blog.csdn.net/aminfo/article/details/7558550
转处:http://wenku.baidu.com/link?url=NQ_JGiFDA_bsM61XVwAltf_TkCdtJ8tIoij3kQppYqRDwlXyFZt2PwR01kHTk-fO7it15m5G7N6D-CLJCmIToP4nOfzlxHrkf3XHgYZlUzu
package com.example.textviewdemo;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.TextView;
public class Marquee extends TextView {
public Marquee(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFocusChanged(boolean focused, int direction,Rect previouslyFocusedRect) {
if (focused)
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
if (hasWindowFocus)
super.onWindowFocusChanged(hasWindowFocus);
}
@Override
public boolean isFocused() {
return true;
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.textviewdemo.MainActivity"
android:orientation="vertical">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:textSize="20sp"
android:textColor="#FF0000"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoLink="all"
android:text="www.baidu.com\n电话:18610331796"
android:textSize="20sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="泡泡花泡花花妈妈爸爸天天天使我们的爱,过了就不会来"
android:singleLine="true"
android:clickable="true"
android:focusable="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusableInTouchMode="true"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="车诚俊,韩静书,李光洙,刘在石,大神,金钏国,哈哈,GARY,智孝,我的野蛮王妃,宫,天国的阶梯"
android:textSize="20sp"
android:singleLine="true"
android:clickable="true"
android:focusable="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusableInTouchMode="true"
/>
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<com.example.textviewdemo.Marquee android:id="@+id/pmd1"
android:layout_width="200dip"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:clickable="true"
android:ellipsize="marquee"
android:focusable="false"
android:singleLine="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:text="跑马灯文字1跑马灯文字1跑马灯文字1跑马灯文字1" />
<com.example.textviewdemo.Marquee android:id="@+id/pmd2"
android:layout_width="200dip"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:clickable="true"
android:ellipsize="marquee"
android:focusable="true"
android:singleLine="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:text="这里是第2个跑马灯噢!这里是第2个跑马灯噢!这里是第2个跑马灯噢!" />
<com.example.textviewdemo.Marquee android:id="@+id/pmd3"
android:layout_width="200dip"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:clickable="true"
android:ellipsize="marquee"
android:focusable="true"
android:singleLine="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:text="》》》第3个跑马灯》》》第3个跑马灯》》》第3个跑马灯" />
</LinearLayout>
</LinearLayout>
备注:如果重写一个类的话,在xml中需要指定该类
<span style="font-size:18px;"><com.example.textviewdemo.Marquee android:id="@+id/pmd3" </span>
onFocusChanged方法
继承自View类,该方法是焦点改变的回调方法,当某个控件重写了该方法,当焦点发生变化时,会自动调用该方法来处理焦点改变的事件
onFocusChanged(boolean focused, int direction,Rect previouslyFocusedRect)
其中focused:表示触发该事件的View是否获得了焦点,当该控件获得焦点时,focused等于true,否则等于false;
direction:表示焦点移动的方向,用数值表示
previouslyFocusedRect:表示在触发事件的View的坐票系中,前一个获得焦点的矩形区域,即表示焦点是从哪里来的,如果不可用则为null;
onWindowFocusChanged方法
继承自View类,可能 直接获取到手机屏幕的高度和宽度,当Activity的当前window获得或失去焦点时会被回调方法,当回调了这个方法时表示Activity是完全对用户可见的,当对话框弹出/消失及Activity新创建及回退等都 会调用此方法