android 实现多textview的滚动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 实现多textview的滚动相关的知识,希望对你有一定的参考价值。

参考技术A 上下滚还是左右滚?
基本思路可以这样:
用一个指定高度的ScrollView 包含住LinearLayout,LinearLayout包含住多个TextView.
利用线程不停地循环执行代码,每次执行结果需要sleep一段时间,每次执行时需要更改ScrollView的滚动位置。具体可以利用Eclipse的上下文帮助查到ScrollView如何变动他的当前滚动位置。

当然还有很多其它的思路,不要拘泥于一种。

android TextView实现滚动显示效果

    在android中,如果设置了TextView控件为单行显示,且显示的文本太长的话,默认情况下会造成显示不全的情况,这种情况下我们需要设置该控件属性如下:

 <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:text="@string/hello_world"
        />
  注意上述标红的3个属性,按照上述设置这3个属性,此TextView空间就会滚动显示文本内容,保证了文本的完全显示。
    但是,上述方式只适用于界面中只有1个TextView的情况,当一个界面之中有多个TextView设置了相同属性,有且只有一个控件会滚动显示,其他TextView控件则不会滚动显示。
    造成这种情况的原因是TextView空间在滚动显示的时候必须获得焦点,但是默认情况下,只能有一个TextView空间获得焦点,所以造成上述情况。
    解决的方法很简单,重写类TextView的方法 isFocused(),使其总是返回true,即总是属于被选中的状态,这样就能够保证多个TextView控件都有滚动显示的效果。
    首先是继承TextView的类:
package com.example.administrator.test_hello_world;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
/**
 * Created by Administrator on 2016/3/17.
 * 实现跑马灯效果的TextView
 */
public class marqueeText extends TextView {
    public marqueeText(Context context) {
        super(context);
    }
    public marqueeText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public marqueeText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    //返回textview是否处在选中的状态
    //而只有选中的textview才能够实现跑马灯效果
    @Override
    public boolean isFocused() {
        return true;
    }
}
    接下来是布局文件:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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:orientation="vertical"
    >
    <!--singleLine只能是单行显示-->
    <com.example.administrator.test_hello_world.marqueeText
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:text="@string/hello_world"
        />
    <com.example.administrator.test_hello_world.marqueeText
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:text="@string/hello_world"
        />
</LinearLayout>
最后是Activity:
MainActivity.java
package com.example.administrator.test_hello_world;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
    void init_view() {
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.activity_main);
        init_view();
    }
}

 

 

 

以上是关于android 实现多textview的滚动的主要内容,如果未能解决你的问题,请参考以下文章

Android中TextView如何实现水平和垂直滚动

Android-实现上下滚动的textview

android TextView实现跑马灯效果(字体滚动)

TextView滚动如何实现

kotlin实现textview的垂直滚动

安卓自定义TextView实现自动滚动