android_TextView_垂直自动滚动.doc_第1页
android_TextView_垂直自动滚动.doc_第2页
android_TextView_垂直自动滚动.doc_第3页
android_TextView_垂直自动滚动.doc_第4页
android_TextView_垂直自动滚动.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

android TextView 垂直自动滚动2011-12-06 19:34:00 我来说两句 收藏 我要投稿 字体:小 大 在做android 应用的开发的时候,横向滚动或者要做出跑马灯的效果很简单,textview本身的属性就支持,只要设置准确就会滚动,开发起来比较简单,但是textview 不支持垂直滚动,那么垂直滚动就需要自己来实现了,很多网友提供的垂直滚 动方案都是千篇一律,使用ScrollView来进行滚动,但是都不完美,做起来有些别扭有一位网友给出的歌词的滚动思路明确,能从根本上解决问题,因此我实现的这个滚动是在这位网友的基础上实现,封装了一个View,view继承自TextView先看看实现的效果:实现图中效果的关键点是:1重写onDrow方法,计算每次的滚动的距离2计算view的Y轴的重点,让当前显示的处于高亮显示状态3定时的刷新View使其界面不断的刷先,出现滚动的效果4实现数据结构,将数据传给view下面看看主要代码:1创建一个类继承TextView/* author xushilin* 垂直滚动的TextView Widget*/public class VerticalScrollTextView extends TextView2实现构造函数: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 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 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(); ;6xml布局文件中调用: 7java代码中调用,传递数据: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(); for(int i=0;i30;i+) if(i%2=0) Sentence sen=new Sentence(i,i+金球奖三甲揭晓C罗

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论