Command设计模式之监听器的设计
2016-05-08 00:25
274 查看
首先监听事件在移动端的表现为触摸或者点击,所以事件一般在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、将点击事件需要处理的逻辑分离出去,达到解耦的目的(委派式)
这里自定义一个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行代码 病毒查杀"); } }); } }
相关文章推荐
- 自己写的下拉刷新的第三方库(适用于listview)
- RecyclerView基本使用
- Ubuntu 安装 MongoDB
- 【codeforces】-#351A--Bear and Game(第一次cf,错到哭,还是有点开心的,嘿嘿)
- 浏览器html页面乱码问题分析
- 解决使用Volley框架出现的乱码问题
- 最简单的win32的窗口程序
- IOS 模仿TableView封装
- 【Codeforces Round】351A - Bear and Game(水)
- php 在centos7 apache中的安装配置
- Python_bug收集_TypeError:'str' does not support the buffer interface
- HDU 1157 Who's in the Middle【水题】
- 集中式源代码版本控制器--SVN
- 坚持起来我自己都害怕,刻苦也很有味道
- 1绿5红的顺序 把千纸鹤串起来那么第25只什么颜色第 36只是什么颜色
- iOS微信小视频优化心得
- 一个简单的飞机订票系统
- Quartz小记(一):Elastic-Job - 分布式定时任务框架
- makefile 编写要点
- 二叉树的镜像