首先监听事件在移动端的表现为触摸或者点击,所以事件一般在onTouch中处理。
这里自定义一个Button控件,具有点击事件。
1、MyButton.js:
package cn.itcast.design.note1.command; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.TextView; public class MyButton extends TextView { public MyButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyButton(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 按下 break; case MotionEvent.ACTION_MOVE:// 移动 break; case MotionEvent.ACTION_UP:// 提起 // 点击事件 if (listener != null) { listener.onMyClick(this); } break; } return super.onTouchEvent(event); } // ① 定义一个接口 On动作Listener public static interface OnMyClickListener { public void onMyClick(View view); } // ② 添加方法setOn动作Listener private OnMyClickListener listener = null; public void setOnMyClickListener(OnMyClickListener l) { listener = l; } // ③ 响应方法 // public void onMyClick(View view); // ④ 事件产生的地方调用响应方法 }
2、该控件可以在布局文件中引用
activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <cn.itcast.design.note1.command.MyButton android:id="@+id/button2" android:gravity="center" android:layout_width="match_parent" android:layout_height="40dp" android:text="自定义按钮" /> </LinearLayout>
3、将点击事件需要处理的逻辑分离出去,达到解耦的目的(委派式)
package cn.itcast.design.note1.command; import android.app.Activity; import android.os.Bundle; import android.view.View; import cn.itcast.design.R; import cn.itcast.design.note1.command.MyButton; import cn.itcast.design.note1.command.MyButton.OnMyClickListener; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyButton button2=(MyButton) findViewById(R.id.button2); button2.setClickable(true); button2.setOnMyClickListener(new OnMyClickListener() { @Override public void onMyClick(View view) { // 200行代码 病毒查杀 System.out.println("200行代码 病毒查杀"); } }); } }