개발 관련/Android

[Tip] 항상 흐르는 텍스트 뷰 만들기 (무한 marquee)

snoworca 2013. 6. 14. 01:43

안드로이드에서 흐르는 텍스트를 만드는 방법은 무척 간단하다. 

Layout 리소스 XML 의 TextView (또는 TextView 가 들어간 위젯) 속성에 다음과 같이 세 줄만 추가해 주면 된다.

 

<TextView

android:ellipsize="marquee"

android:singleLine="true"

android:marqueeRepeatLimit="marquee_forever"

<!--  중략  -->

 

하지만 위와 같은 방법으로 사용할 경우 포커스가 위치해 있을 경우만 흐르게 된다.

항상 흐르는 텍스트 뷰를 만들기 위해서 다음과 같이 TextView를 상속받는 커스텀 클래스를 만들어야 한다.

 

import android.content.Context;

import android.graphics.Rect;

import android.util.AttributeSet;

import android.widget.TextView;


public class MarqueeTextView extends TextView{

public MarqueeTextView(Context context) {

super(context);

}

public MarqueeTextView(Context context, AttributeSet attributeSet) {

super(context, attributeSet);

}

@Override

protected void onFocusChanged(boolean focused, int direction, Rect

      previouslyFocusedRect) {

    if(focused)

        super.onFocusChanged(focused, direction, previouslyFocusedRect);

}


@Override

public void onWindowFocusChanged(boolean focused) {

    if(focused)

        super.onWindowFocusChanged(focused);

}

@Override

public boolean isFocused() {

   returntrue;

}

}

 

그리고 다시 Layout 의 XML 로 돌아와서 흐르는 기능이 적용된 TextView를 위의 커스텀 TextView 클래스로 교체하면 끝!

 

 

<com.test.MarqueeTextView

android:id="@+id/textViewTitleOnDrawBar"

android:layout_width="fill_parent"

android:layout_height="fill_parent""

android:ellipsize="marquee"

android:marqueeRepeatLimit="marquee_forever"

android:singleLine="true"

android:text="흐르는 텍스트~~~~~~~~~"/>


   버튼과 텍스트 뷰에 항상 흐르는 텍스트를 적용한 예제 프로젝트 (이클립스 기반으로 작성하였습니다.)

   

MarqueeTest.zip