长按Backspace连续删除
如下的代码实现通过按backspace键后,数字过多消除的按钮事件。事件的原理如下,事件要的效果是这样的,当长按消除按钮后,数字会慢慢消除,当消除5个字符后继续消除的话消除速度会增快。通过这份代码可以帮助我们较好的初识Handler的工作机制。
package com.william.handlertest;
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class HandlerTest extends Activity implements Runnable{ private EditText content = null; private Button backspace = null; private boolean isStop = false; private Handler mHandler = null; private class BackspaceOnTouchListener implements Button.OnTouchListener{ @Override public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()){ case MotionEvent.ACTION_DOWN: isStop = true; mHandler = getHandler(content); new Thread(HandlerTest. this).start(); break; case MotionEvent.ACTION_UP: isStop = false; break; default: break; } return false; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); content = (EditText) findViewById(R.id.content); content.setCursorVisible(false); backspace = (Button) findViewById(R.id.backspace); backspace.setOnTouchListener( new BackspaceOnTouchListener()); } private Handler getHandler( final TextView content){ return new Handler(){ @Override public void handleMessage(Message msg) { content.setText((String)msg.obj); super.handleMessage(msg); } }; } @Override public void run() { try{ int i = 0; do{ i++; Thread.sleep((i > 5 ? 100 : 500)); String contentStr = this.content.getText().toString(); if(contentStr.length()==0){ break; } contentStr = contentStr.substring(0, contentStr.length()-1); Message msg = mHandler.obtainMessage(); msg.obj=contentStr; msg.sendToTarget(); } while(isStop); } catch(Exception e){ e.printStackTrace(); } } } |