`
alienjun
  • 浏览: 11721 次
  • 性别: Icon_minigender_1
  • 来自: 广西
最近访客 更多访客>>
社区版块
存档分类
最新评论

TextView垂直滚动

 
阅读更多
代码来源于网络:

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();		

		
	}

}
分享到:
评论
3 楼 lenomon 2012-04-07  
alienjun 写道
lenomon 写道
这篇文章说了几个方法可以看看 android自定义View-垂直滚动的TextView

好!~


谢谢,多多关注我的博客

这里有个关于垂直滚动的方法汇总:android垂直自动滚动
2 楼 alienjun 2012-03-20  
lenomon 写道
这篇文章说了几个方法可以看看 android自定义View-垂直滚动的TextView

好!~
1 楼 lenomon 2012-03-11  
这篇文章说了几个方法可以看看 android自定义View-垂直滚动的TextView

相关推荐

    Android TextView实现垂直滚动效果的方法

    在Android开发中,当需要在一个TextView中展示大量文本,而屏幕空间有限时,可以使用TextView的垂直滚动功能来实现文本的连续显示。本篇文章将详细讲解如何在Android中实现TextView的垂直滚动效果。 首先,要开启...

    Android 应用中TextView垂直滚动

    在提到的场景中,开发者需要在TextView中实现文字的垂直滚动。虽然Android SDK原生支持TextView的水平滚动(横向跑马灯效果),但并未提供直接的方法来实现垂直滚动。在面对这种需求时,开发者需要自定义解决方案。 ...

    安卓,Android TextView的垂直滚动效果和上下滚动效果,原生动画实现

    本文将深入探讨如何使用原生的Android动画技术来实现TextView的垂直滚动效果以及上下滚动效果。 一、基本概念 1. 垂直滚动:当TextView中的文本内容超出可视区域时,可以通过垂直滚动来展示未显示的部分。通常有两...

    TextView 垂直自动滚动

    在XML布局文件中,可以通过设置`TextView`的相关属性来开启垂直滚动: ```xml &lt;TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text...

    Android 实现TextView上下滚动效果

    在这个案例中,我们关注的是垂直滚动,即TextView的内容能从上至下逐行滚动。 要实现TextView的上下滚动,我们需要使用`android:singleLine`和`android:ellipsize`属性。`android:singleLine`属性设置为true,使得...

    android TextView水平滚动和垂直滚动效果

    本篇文章将深入探讨如何实现TextView的水平滚动和垂直滚动效果,并通过实际案例进行说明。 首先,我们要了解TextView的基本属性。`android:singleLine`(已被弃用,但仍然可用)或`android:maxLines`属性可以限制...

    Android垂直滚动TextView跑马灯Demo

    本示例"Android垂直滚动TextView跑马灯Demo"就是一种常见的UI特效,它主要用于显示大量的文本内容,尤其适用于展示滚动公告、新闻标题或者广告等内容。跑马灯效果在Android中通常是通过自定义View或者对现有控件进行...

    垂直滚动的TextView

    而`垂直滚动的TextView`则是对标准`TextView`的一种扩展,它允许文本内容在垂直方向上自动滚动,通常用于显示长文本或者滚动公告等场景。在这个案例中,我们看到一个名为`AutoVerticalTextview-master`的压缩包,它...

    android 自定义垂直滚动的多行TextView

    自定义TextView,可实现多行textView的滚动,自定义颜色、大小、滚动速度和行间距

    androidTextView的垂直滚动

    最近突然对原来做的一个项目有想法,当时是一个显示文本的界面会循环滚动,因为时间比较仓促,就以实现需求为目的写了一个滚动的TextView,结果还是效果挺好的。现在想把它分享给大家,这次写demo是从零开始,没在...

    TextView上下滚动效果

    这个项目就是针对这样的需求,提供了一个在`Eclipse`环境下开发的`TextView`上下滚动效果的示例。 要实现`TextView`的上下滚动效果,我们可以利用`TextView`的`marquee`属性和`ellipsize`属性。首先,`marquee`属性...

    android 垂直滚动的TextView

    当我们需要显示的文本过长,超出屏幕范围时,可以利用`TextView`的垂直滚动功能来实现文本的完整展示。本篇文章将深入探讨如何在Android中设置`TextView`实现垂直滚动,并通过一个名为`VerticalScrollTextView_Demo`...

    android垂直滚动的textview,仿跑马灯效果

    在Android开发中,实现一个垂直滚动的TextView以达到跑马灯效果是一项常见的需求。这种效果常见于各种信息展示,如公告、广告等,使得较长的文字能够在有限的空间内完整展示。以下将详细介绍如何在Android中创建这样...

    垂直滚动的textview

    然而,在某些场景下,我们可能需要实现文本的滚动效果,例如公告、滚动字幕等,这时就需要用到“垂直滚动的`TextView`”。本文将深入探讨如何在Android中创建一个可以垂直滚动的`TextView`。 首先,我们要理解`...

    android垂直滚动的textview

    本篇文章将深入探讨如何在Android中创建一个能够垂直滚动的TextView。 首先,了解TextView的基本属性。TextView具有`maxLines`属性,它限制了TextView显示的最大行数。当设置`maxLines`属性并超过了单屏可容纳的...

    垂直滚动TextView.zip

    然而,当文本内容过多,无法完全在视窗内显示时,开发者可能会需要实现一个可以自动垂直滚动的TextView,这就是"垂直滚动TextView"的功能。这个功能通常用于展示长篇文本,如公告、条款或新闻,让用户能够逐行阅读。...

    TextView实现上线滚动

    在某些场景下,我们可能希望让`TextView`中的文字实现上下滚动的效果,以展示更多的信息或者吸引用户的注意力。这篇博文中,开发者`zjc08125`分享了如何在Android中实现`TextView`的上下滚动特效。 首先,我们要...

    关于android TextView自动滚动的测试

    在这个场景下,我们主要关注垂直滚动,也就是文本内容超出`TextView`可视区域时,能自动向上或向下滚动以展示未显示的部分。 1. **启用滚动** 要启用`TextView`的滚动功能,需确保其内容超过了视图的边界。这可以...

    安卓textView相关-自定义垂直循环滚动Textview.rar

    "安卓textView相关-自定义垂直循环滚动Textview.rar"正是为了解决这一问题,它提供了一个自定义的TextView实现,使得文本可以垂直方向上循环滚动,增加了信息的可读性。 自定义垂直循环滚动TextView的主要目标是...

    垂直滚动textview例子

    简单的垂直滚动自定义view

Global site tag (gtag.js) - Google Analytics