栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

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

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

一、先来看看效果演示

二、实现原理:

这个其实不难实现,通过一个定时器不断调用TextView的setText就行了,在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文件中定义:

 

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的时候能有所帮助,如果有疑问可以留言交流。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/161716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号