Android自定义View实现打字机效果

Android自定义View实现打字机效果,第1张

概述一、先来看看效果演示二、实现原理:这个其实不难实现,通过一个定时器不断调用TextView的setText就行了,在setText的时候播放打字的音效。

一、先来看看效果演示

二、实现原理:

这个其实不难实现,通过一个定时器不断调用TextVIEwsetText就行了,在setText的时候播放打字的音效。

具体代码如下:

import java.util.Timer;import java.util.TimerTask;import androID.content.Context;import androID.media.MediaPlayer;import androID.text.TextUtils;import androID.util.AttributeSet;import androID.Widget.TextVIEw;import com.uperone.typetextvIEw.R;/** * 模拟打字机效果 *  * */public class TypeTextVIEw extends TextVIEw { private Context mContext = null; private MediaPlayer mMediaPlayer = null; private String mshowtextString = null; private Timer mTypeTimer = null; private OnTypeVIEwListener mOnTypeVIEwListener = null; private static final int TYPE_TIME_DELAY = 80; private int mTypeTimeDelay = TYPE_TIME_DELAY; // 打字间隔 public TypeTextVIEw(Context context,AttributeSet attrs,int defStyle) {  super(context,attrs,defStyle);  initTypeTextVIEw( context ); } public TypeTextVIEw(Context context,AttributeSet attrs) {  super(context,attrs);  initTypeTextVIEw( context ); } public TypeTextVIEw(Context context) {  super(context);  initTypeTextVIEw( context ); } public voID setonTypeVIEwListener( OnTypeVIEwListener onTypeVIEwListener ){  mOnTypeVIEwListener = onTypeVIEwListener; } public voID start( final String textString ){  start( textString,TYPE_TIME_DELAY ); } public voID start( final String textString,final int typeTimeDelay ){  if( TextUtils.isEmpty( textString ) || typeTimeDelay < 0 ){   return;  }  post( new Runnable( ) {   @OverrIDe   public voID run() {    mshowtextString = textString;    mTypeTimeDelay = typeTimeDelay;    setText( "" );    startTypeTimer( );    if( null != mOnTypeVIEwListener ){     mOnTypeVIEwListener.onTypestart( );    }   }  }); } public voID stop( ){  stopTypeTimer( );  stopAudio(); } private voID initTypeTextVIEw( Context context ){  mContext = context; } private voID startTypeTimer( ){  stopTypeTimer( );  mTypeTimer = new Timer( );  mTypeTimer.schedule( new TypeTimerTask(),mTypeTimeDelay ); } private voID stopTypeTimer( ){  if( null != mTypeTimer ){   mTypeTimer.cancel( );   mTypeTimer = null;  } } private voID startAudioPlayer() {  stopAudio();  playAudio( R.raw.type_in ); } private voID playAudio( int audioResID ){  try{   stopAudio( );   mMediaPlayer = MediaPlayer.create( mContext,audioResID );   mMediaPlayer.start( );  }catch( Exception e ){   e.printstacktrace();  } } private voID stopAudio( ){  if( mMediaPlayer != null && mMediaPlayer.isPlaying( ) ){   mMediaPlayer.stop( );   mMediaPlayer.release( );   mMediaPlayer = null;  } } class TypeTimerTask extends TimerTask{  @OverrIDe  public voID run() {   post(new Runnable( ) {    @OverrIDe    public voID run() {     if( getText( ).toString( ).length( ) < mshowtextString.length( ) ){      setText( mshowtextString.substring(0,getText( ).toString( ).length( ) + 1 ) );      startAudioPlayer();      startTypeTimer( );     }else{      stopTypeTimer( );      if( null != mOnTypeVIEwListener ){       mOnTypeVIEwListener.onTypeOver( );      }     }    }   });  } } public interface OnTypeVIEwListener{  public voID onTypestart( );  public voID onTypeOver( ); }}

三、使用说明:

1、在xml文件中定义:

 <com.uperone.typetext.vIEw.TypeTextVIEw  androID:ID="@+ID/typeTxtID"  androID:layout_wIDth="fill_parent"  androID:layout_height="wrap_content"  androID:layout_centerVertical="true" />

2、在代码中实例化:

 mTypeTextVIEw = ( TypeTextVIEw )findVIEwByID(R.ID.typeTxtID); mTypeTextVIEw.setonTypeVIEwListener( new OnTypeVIEwListener( ) {  @OverrIDe  public voID onTypestart() {   print( "onTypestart" );  }  @OverrIDe  public voID onTypeOver() {   print( "onTypeOver" );  } });

3、调用start方法:

 

mTypeTextVIEw.start( TEST_DATA );

四、总结

以上就是AndroID自定义view实现打字机效果的全部内容,感兴趣的快快自己动手实践起来,希望本文的内容对大家开发AndroID的时候能有所帮助,如果有疑问可以留言交流。

总结

以上是内存溢出为你收集整理的Android自定义View实现打字机效果全部内容,希望文章能够帮你解决Android自定义View实现打字机效果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1148455.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存