Android 文本內容滾動顯示

1. 對於需要文本顯示的內容過多的時候,需要滾動顯示

<RelativeLayout 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" >

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="80dp"
        android:fadeScrollbars="false"
        android:scrollbarAlwaysDrawVerticalTrack="true"
        android:scrollbars="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@android:color/black"
                android:scrollbars="vertical"
                android:text="@string/hello_world" />
        </LinearLayout>
    </ScrollView>

</RelativeLayout>

2.對於需要實現跑馬燈似的,自動滾動的,這裏是看了github上一個國外的程序員自定義的一個textview


package cn.steve.slidetextview;

import android.content.Context;
import android.util.AttributeSet;
import android.view.animation.LinearInterpolator;
import android.widget.Scroller;
import android.widget.TextView;

/**
 * A TextView that scrolls it contents across the screen, in a similar fashion
 * as movie credits roll across the theater screen.
 * 
 * @author Matthias Kaeppler
 * 
 */
public class ScrollingTextView extends TextView implements Runnable {

	private static final float DEFAULT_SPEED = 15.0f;

	private Scroller scroller;
	private float speed = DEFAULT_SPEED;
	private boolean continuousScrolling = true;

	public ScrollingTextView(Context context) {
		super(context);
		setup(context);
	}

	public ScrollingTextView(Context context, AttributeSet attributes) {
		super(context, attributes);
		setup(context);
	}

	private void setup(Context context) {
		scroller = new Scroller(context, new LinearInterpolator());
		setScroller(scroller);
	}

	@Override
	protected void onLayout(boolean changed, int left, int top, int right,
			int bottom) {
		super.onLayout(changed, left, top, right, bottom);
		if (scroller.isFinished()) {
			scroll();
		}
	}

	private void scroll() {
		int viewHeight = getHeight();
		int visibleHeight = viewHeight - getPaddingBottom() - getPaddingTop();
		int lineHeight = getLineHeight();

		int offset = -1 * visibleHeight;
		int distance = visibleHeight + getLineCount() * lineHeight;
		int duration = (int) (distance * speed);

		scroller.startScroll(0, offset, 0, distance, duration);

		if (continuousScrolling) {
			post(this);
		}
	}

	@Override
	public void run() {
		if (scroller.isFinished()) {
			scroll();
		} else {
			post(this);
		}
	}

	public void setSpeed(float speed) {
		this.speed = speed;
	}

	public float getSpeed() {
		return speed;
	}

	public void setContinuousScrolling(boolean continuousScrolling) {
		this.continuousScrolling = continuousScrolling;
	}

	public boolean isContinuousScrolling() {
		return continuousScrolling;
	}
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章