一、先来看看效果演示
二、实现原理:
这个其实不难实现,通过一个定时器不断调用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文件中定义:
<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实现打字机效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)