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怎么能让它自动滚动的主要内容,如果未能解决你的问题,请参考以下文章