国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android自定義View實(shí)現(xiàn)打字機(jī)效果

2019-12-12 05:34:17
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、先來(lái)看看效果演示

二、實(shí)現(xiàn)原理:

這個(gè)其實(shí)不難實(shí)現(xiàn),通過(guò)一個(gè)定時(shí)器不斷調(diào)用TextViewsetText就行了,在setText的時(shí)候播放打字的音效。

具體代碼如下:

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;/** * 模擬打字機(jī)效果 *  * */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( ); }}

三、使用說(shuō)明:

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、在代碼中實(shí)例化:

 mTypeTextView = ( TypeTextView )findViewById(R.id.typeTxtId); mTypeTextView.setOnTypeViewListener( new OnTypeViewListener( ) {  @Override  public void onTypeStart() {   print( "onTypeStart" );  }  @Override  public void onTypeOver() {   print( "onTypeOver" );  } });

3、調(diào)用start方法:

 

mTypeTextView.start( TEST_DATA );

四、總結(jié)

以上就是Android自定義View實(shí)現(xiàn)打字機(jī)效果的全部?jī)?nèi)容,感興趣的快快自己動(dòng)手實(shí)踐起來(lái),希望本文的內(nèi)容對(duì)大家開(kāi)發(fā)Android的時(shí)候能有所幫助,如果有疑問(wèn)可以留言交流。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 麟游县| 安多县| 白银市| 彭泽县| 奉新县| 长泰县| 咸宁市| 博湖县| 江津市| 南丰县| 江陵县| 信阳市| 屏边| 乡城县| 绥芬河市| 古交市| 奈曼旗| 奉化市| 远安县| 连城县| 鹤峰县| 平阴县| 望奎县| 江西省| 婺源县| 阿荣旗| 武宣县| 兴隆县| 茶陵县| 格尔木市| 陆河县| 康保县| 商城县| 红安县| 维西| 济南市| 达州市| 云梦县| 九龙县| 东阳市| 肃北|