自定义View -- 实现字符串一个一个显示的动态动画

实现文字welcome的一个一个显示,效果如上述动态图片。

主要实现思路如下:把字符串拆开,每次画字符串的一部分,再通过一个线程来沉睡400毫秒,并调用方法postInvalidate()继续绘制。

 

	public MyTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
		Log.d(TAG," MyTextView(Context context, AttributeSet attrs)");
		this.context = context;
		this.mText = context.getString(R.string.welcome);
		ShowTextThread showTextThread = new ShowTextThread();
		showTextThread.start();
		// TODO Auto-generated constructor stub
	}

	class ShowTextThread extends Thread{
		
		public void run(){
			Log.d(TAG," showTextThread -- run()");
			while(mTextIndex < mText.length()+1){
				Log.d(TAG," showTextThread -- run() mTextIndex = "+mTextIndex);
				mSubText = mText.substring(0, mTextIndex);	
				try {
					Thread.sleep(400);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				postInvalidate();
				mTextIndex++;
			}
			
		}
		
	}


其中mText是要显示的字符串"welcome",mSubText是逐渐增多的字符串:w->we->wel->welc->welco->welcom->welcome

在新的线程中,每次休眠400毫秒后,就调用方法postInvalidate(),其实就是调用onDraw()方法进行重新绘制自定义view。这样子就产生了字符串一个一个显示的效果。

 

知识点:

调用方法postInvalidate()和invalidate()来通知View重绘。

这俩个方法的区别:postInvalidate()是在非UI线程中调用,invalidate()在UI线程中调用。

在这个例子中,我们启动了一个新的子线程showTextThread,所以调用方法postInvalidate(),去重绘View

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值