代码来源于网络:
TextView垂直滚动
package com.alienjun;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.os.Handler;
import android.util.AttributeSet;
import android.widget.TextView;
public class VerticalScrollTextView extends TextView{
private Paint mPaint;
Paint mPathPaint;
List<Sentence> list;
int mY=10;
int index=1;
float middleY=1;
float mX=30;
float DY=30;
public List<Sentence> getList() {
return list;
}
public void setList(List<Sentence> list) {
this.list = list;
}
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<Sentence>();
Sentence sen=new Sentence(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);
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
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);
}
}
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;
}
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();
}
};
}
XML布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.alienjun.VerticalScrollTextView
android:id="@+id/sampleView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/selector"
/>
</LinearLayout>
//model
package com.alienjun;
public class Sentence {
private int id;
public Sentence(int id, String name) {
super();
this.id = id;
this.name = name;
}
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Activity:
package com.alienjun;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
public class VerticalScrollTextActivity extends Activity{
VerticalScrollTextView mSampleView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
mSampleView = (VerticalScrollTextView) findViewById(R.id.sampleView1);
List<Sentence> 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();
}
}
分享到:
相关推荐
在Android开发中,当需要在一个TextView中展示大量文本,而屏幕空间有限时,可以使用TextView的垂直滚动功能来实现文本的连续显示。本篇文章将详细讲解如何在Android中实现TextView的垂直滚动效果。 首先,要开启...
在提到的场景中,开发者需要在TextView中实现文字的垂直滚动。虽然Android SDK原生支持TextView的水平滚动(横向跑马灯效果),但并未提供直接的方法来实现垂直滚动。在面对这种需求时,开发者需要自定义解决方案。 ...
本文将深入探讨如何使用原生的Android动画技术来实现TextView的垂直滚动效果以及上下滚动效果。 一、基本概念 1. 垂直滚动:当TextView中的文本内容超出可视区域时,可以通过垂直滚动来展示未显示的部分。通常有两...
在XML布局文件中,可以通过设置`TextView`的相关属性来开启垂直滚动: ```xml <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text...
在这个案例中,我们关注的是垂直滚动,即TextView的内容能从上至下逐行滚动。 要实现TextView的上下滚动,我们需要使用`android:singleLine`和`android:ellipsize`属性。`android:singleLine`属性设置为true,使得...
本篇文章将深入探讨如何实现TextView的水平滚动和垂直滚动效果,并通过实际案例进行说明。 首先,我们要了解TextView的基本属性。`android:singleLine`(已被弃用,但仍然可用)或`android:maxLines`属性可以限制...
本示例"Android垂直滚动TextView跑马灯Demo"就是一种常见的UI特效,它主要用于显示大量的文本内容,尤其适用于展示滚动公告、新闻标题或者广告等内容。跑马灯效果在Android中通常是通过自定义View或者对现有控件进行...
而`垂直滚动的TextView`则是对标准`TextView`的一种扩展,它允许文本内容在垂直方向上自动滚动,通常用于显示长文本或者滚动公告等场景。在这个案例中,我们看到一个名为`AutoVerticalTextview-master`的压缩包,它...
自定义TextView,可实现多行textView的滚动,自定义颜色、大小、滚动速度和行间距
最近突然对原来做的一个项目有想法,当时是一个显示文本的界面会循环滚动,因为时间比较仓促,就以实现需求为目的写了一个滚动的TextView,结果还是效果挺好的。现在想把它分享给大家,这次写demo是从零开始,没在...
这个项目就是针对这样的需求,提供了一个在`Eclipse`环境下开发的`TextView`上下滚动效果的示例。 要实现`TextView`的上下滚动效果,我们可以利用`TextView`的`marquee`属性和`ellipsize`属性。首先,`marquee`属性...
当我们需要显示的文本过长,超出屏幕范围时,可以利用`TextView`的垂直滚动功能来实现文本的完整展示。本篇文章将深入探讨如何在Android中设置`TextView`实现垂直滚动,并通过一个名为`VerticalScrollTextView_Demo`...
在Android开发中,实现一个垂直滚动的TextView以达到跑马灯效果是一项常见的需求。这种效果常见于各种信息展示,如公告、广告等,使得较长的文字能够在有限的空间内完整展示。以下将详细介绍如何在Android中创建这样...
然而,在某些场景下,我们可能需要实现文本的滚动效果,例如公告、滚动字幕等,这时就需要用到“垂直滚动的`TextView`”。本文将深入探讨如何在Android中创建一个可以垂直滚动的`TextView`。 首先,我们要理解`...
本篇文章将深入探讨如何在Android中创建一个能够垂直滚动的TextView。 首先,了解TextView的基本属性。TextView具有`maxLines`属性,它限制了TextView显示的最大行数。当设置`maxLines`属性并超过了单屏可容纳的...
然而,当文本内容过多,无法完全在视窗内显示时,开发者可能会需要实现一个可以自动垂直滚动的TextView,这就是"垂直滚动TextView"的功能。这个功能通常用于展示长篇文本,如公告、条款或新闻,让用户能够逐行阅读。...
在某些场景下,我们可能希望让`TextView`中的文字实现上下滚动的效果,以展示更多的信息或者吸引用户的注意力。这篇博文中,开发者`zjc08125`分享了如何在Android中实现`TextView`的上下滚动特效。 首先,我们要...
在这个场景下,我们主要关注垂直滚动,也就是文本内容超出`TextView`可视区域时,能自动向上或向下滚动以展示未显示的部分。 1. **启用滚动** 要启用`TextView`的滚动功能,需确保其内容超过了视图的边界。这可以...
"安卓textView相关-自定义垂直循环滚动Textview.rar"正是为了解决这一问题,它提供了一个自定义的TextView实现,使得文本可以垂直方向上循环滚动,增加了信息的可读性。 自定义垂直循环滚动TextView的主要目标是...
简单的垂直滚动自定义view