android垂直TextView怎么能让它自动滚动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android垂直TextView怎么能让它自动滚动相关的知识,希望对你有一定的参考价值。

就是像跑马灯一样的~~~~要垂直滚动,不要水平的

这是跑马灯的效果。实现该功能步骤:

 1、自定义Views,继承自TextView。

 2、重写onDrow方法,计算每次的滚动的距离。

 3、计算view的Y轴的重点,让当前显示的处于高亮显示状态。

 4、定时的刷新View使其界面不断的刷先,出现滚动的效果。

 5、实现数据结构,将数据传给view。

几个步骤代码可以参考下面

下面看看主要代码:
1、创建一个类继承TextView
/**
 * @author xushilin
 * 
 * 垂直滚动的TextView Widget
 */
public class VerticalScrollTextView extends TextView
 
2、实现构造函数:
public VerticalScrollTextView(Context context) 
super(context);
init();

public VerticalScrollTextView(Context context, AttributeSet attr) 
super(context, attr);
init();

public VerticalScrollTextView(Context context, AttributeSet attr, int i) 
super(context, attr, i);
init();

private void init() 
setFocusable(true);
//这里主要处理如果没有传入内容显示的默认值
if(list==null)
list=new ArrayList<Notice>();
Notice sen=new Notice(0,"暂时没有通知公告");
list.add(0, sen);

//普通文字的字号,以及画笔颜色的设置
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setTextSize(16);
mPaint.setColor(Color.BLACK);
mPaint.setTypeface(Typeface.SERIF);
//高亮文字的字号,以及画笔颜色的设置
mPathPaint = new Paint();
mPathPaint.setAntiAlias(true);
mPathPaint.setColor(Color.RED);
mPathPaint.setTextSize(16);
mPathPaint.setTypeface(Typeface.SANS_SERIF);

 
3、从写onDraw方法,并计算文字的行距,并且将将普通文字和高亮文字,在这个方法中绘制出来
protected void onDraw(Canvas canvas) 
super.onDraw(canvas);
canvas.drawColor(0xEFeffff);
Paint p = mPaint;
Paint p2 = mPathPaint;
p.setTextAlign(Paint.Align.CENTER);
if (index == -1)
return;
p2.setTextAlign(Paint.Align.CENTER);

canvas.drawText(list.get(index).getName(), mX, middleY, p2);
float tempY = middleY;

for (int i = index - 1; i >= 0; i--) 
tempY = tempY - DY;
if (tempY < 0) 
break;

canvas.drawText(list.get(i).getName(), mX, tempY, p);

tempY = middleY;

for (int i = index + 1; i < list.size(); i++) 
tempY = tempY + DY;
if (tempY > mY) 
break;

canvas.drawText(list.get(i).getName(), mX, tempY, p);


4、计算Y轴中值以及更新索引
protected void onSizeChanged(int w, int h, int ow, int oh) 
super.onSizeChanged(w, h, ow, oh);
mX = w * 0.5f; 
mY = h;
middleY = h * 0.5f;


private long updateIndex(int index) 
if (index == -1)
return -1;
this.index=index;
return index;

 
5、定时更新view,并将接口暴露给客户程序调用。
public void updateUI()
new Thread(new updateThread()).start();


class updateThread implements Runnable 
long time = 1000;
int i=0;
public void run() 
while (true) 
long sleeptime = updateIndex(i);
time += sleeptime;
mHandler.post(mUpdateResults);
if (sleeptime == -1)
return;
try 
Thread.sleep(time);
i++;
if(i==getList().size())
i=0;
 catch (InterruptedException e) 
e.printStackTrace();




Handler mHandler = new Handler();
Runnable mUpdateResults = new Runnable() 
public void run() 
invalidate(); 

;
 
6、xml布局文件中调用:
<?xml version="1.0" encoding="utf-8"?>   
<!-- Demonstrates scrolling with a ScrollView. -->   
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical">

    <com.demo.xsl.text.SampleView      
        android:id="@+id/sampleView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/selector"
       />    

</LinearLayout>
7、java代码中调用,传递数据:
package com.demo.xsl.text;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;

public class VerticalScrollTextActivity extends Activity 


SampleView mSampleView;
@Override
public void onCreate(Bundle savedInstanceState) 
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSampleView = (SampleView) findViewById(R.id.sampleView1);
List lst=new ArrayList<Sentence>();
for(int i=0;i<30;i++)
if(i%2==0)
Sentence sen=new Sentence(i,i+"、金球奖三甲揭晓 C罗梅西哈维入围 ");
lst.add(i, sen);
else
Sentence sen=new Sentence(i,i+"、公牛欲用三大主力换魔兽?????");
lst.add(i, sen);


//给View传递数据
mSampleView.setList(lst);
//更新View
mSampleView.updateUI();

参考技术A 线程控制改变位置,也可以写用动画处理。 参考技术B 自己看百度文库,写的很清楚了:

http://wenku.baidu.com/view/ad7840d13186bceb19e8bbc0.html本回答被提问者采纳

android textview 怎么换行?

文字长度已经超出屏幕,超出部分就显示不出来了,想让它显示到下一行,怎么操作?

textView如果想要强制换行的话,必须先把TextView显示方式修改为多行(android:singleLine="false"),然后才能换行。
方法一般用两种:

1、在字符串里加入“\\n”,如"abc\\nrc";

2、把TextView设置为固定宽度,然后让系统自动换行。如android:layout_width="100dp";

扩展资料

Class Overview

向用户显示文本,并可选择允许他们编辑文本。TextView是一个完整的文本编辑器,但是基类为不允许编辑;其子类EditText允许文本编辑。

允许用户复制部分或全部内容,将其粘贴到别的地方,设置XML属性Android:textisselectable :“真” 或设置相关方法 settextisselectable 为“真”。textisselectable flag 允许用户在TextView选择手势,从而触发系统内置的复制/粘贴控件。

Displays text to the user and optionally allows them to edit it. A TextView is a complete text editor, however the basic class is configured to not allow editing; seeEditTextfor a subclass that configures the text view for editing.

To allow users to copy some or all of the TextView's value and paste it somewhere else, set the XML attributeandroid:textIsSelectableto "true" or callsetTextIsSelectable(true). ThetextIsSelectableflag allows users to make selection gestures in the TextView, which in turn triggers the system's built-in copy/paste controls.

参考资料来源:百度百科:TextView

参考技术A textView如果想要强制换行的话,必须先把TextView显示方式修改为多行(android:singleLine="false"),然后才能换行。
方法一般用两种:
1、在字符串里加入“\n”,如"abc\nrc";
2、把TextView设置为固定宽度,然后让系统自动换行。如android:layout_width="100dp";
参考技术B 在textview所在的xml布局文件中找它的xml定义标签,给textview的标签添加上属性android:singleLine="false",这样当文字长度超出屏幕就会自动换行。本回答被提问者和网友采纳 参考技术C textView如果想要强制换行的话,必须先把TextView显示方式修改为多行(android:singleLine="false"),然后才能换行。
方法一般用两种:
1、在字符串里加入“\n”,如"abc\nrc";
2、把TextView设置为固定宽度,然后让系统自动换行。如android:layout_width="100dp";
参考技术D android:singleLine="true"
android:ellipsize="end"
这样就可以了!

以上是关于android垂直TextView怎么能让它自动滚动的主要内容,如果未能解决你的问题,请参考以下文章

android textview 怎么换行?

在Android开发中。怎么能让layout中的TextView控件不会根据其它控件的大小而改变位置。

Android 可手动管理并垂直滚动轮播控件

Android 可手动管理并垂直滚动轮播控件

Android 可手动管理并垂直滚动轮播控件

Android Studio TextView上下滚动轮播