Android自定義View實現(xiàn)打字機效果
一、先來看看效果演示

二、實現(xiàn)原理:
這個其實不難實現(xiàn),通過一個定時器不斷調(diào)用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、調(diào)用start方法:
mTypeTextView.start( TEST_DATA );
四、總結(jié)
以上就是Android自定義View實現(xiàn)打字機效果的全部內(nèi)容,感興趣的快快自己動手實踐起來,希望本文的內(nèi)容對大家開發(fā)Android的時候能有所幫助,如果有疑問可以留言交流。
相關(guān)文章
詳解Android中Runtime解決屏幕旋轉(zhuǎn)問題(推薦)
這篇文章主要介紹了Runtime解決屏幕旋轉(zhuǎn)問題的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09
Android客戶端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解
這篇文章主要為大家介紹了Android客戶端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
使用PackageManager獲得應(yīng)用信息實例方法
PackageManager是Android中一個很有用的類,能夠獲取已安裝的應(yīng)用(包)的信息,如應(yīng)用名稱、圖標(biāo)、權(quán)限,安裝、刪除應(yīng)用(包)等2013-11-11
Android通過RemoteViews實現(xiàn)跨進程更新UI示例
本篇文章主要介紹了Android通過RemoteViews實現(xiàn)跨進程更新UI示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
Android App的運行環(huán)境及Android系統(tǒng)架構(gòu)概覽
這篇文章主要介紹了Android App的運行環(huán)境及Android系統(tǒng)架構(gòu)概覽,并對應(yīng)用程序進程間隔離機制等知識點作了介紹,需要的朋友可以參考下2016-03-03
Android2.3實現(xiàn)SD卡與U盤自動掛載的方法
這篇文章主要介紹了Android2.3實現(xiàn)SD卡與U盤自動掛載的方法,較為詳細的分析了Android2.3實現(xiàn)SD卡與U盤自動掛載的具體步驟與相關(guān)技巧,需要的朋友可以參考下2016-02-02
android初學(xué)者必須掌握的Activity狀態(tài)的四大知識點(必讀)
本篇文章主要介紹了android activity的四種狀態(tài),詳細的介紹了四種狀態(tài),包括Running狀態(tài)、Paused狀態(tài)、Stopped狀態(tài)、Killed狀態(tài),有興趣的可以了解一下。2016-11-11

