1、有如下事件:
setOnClickListener ,
setOnLongClickListener
setOnTouchListener
setOnFocusChangeListener
setOnKeyListener
2、形式:
已知的XML文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/layout01">"
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
button1.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
System.out.println("长按");
return false;
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("单击");
}
});
长按一下button1后并且释放
输出:长按
单击
得出在长按了组件后,两个事件都执行了。为了只执行长按的事件,需要在setOnLongClickListener的返回值里修改返回值。它决定了对组件长按后是否还加入一个短按。设为TRUE,则表明不加入短按;设为FALSE,则表明加入短按。
官方解释里:true和false在其中起着标志事件是否被消耗,如果消耗了就不再传递给其他控件了。如果没有消耗则还会传递给其他控件,触发其他控件的事件处理函数。
viewGroup=(ViewGroup)findViewById(R.id.layout01);
viewGroup.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int actionType=event.getAction();
if(actionType==MotionEvent.ACTION_DOWN){
System.out.println("anxia");
}else if(actionType==MotionEvent.ACTION_MOVE){
button.setX(event.getX());
button.setY(event.getY());
System.out.println("yidong");
}else if(actionType==MotionEvent.ACTION_UP){
System.out.println("songkai");
}
return true;
}
});
这个事件的参数很特别,加了一个MotionEvent。要注意,事件是由事件元组成的,它们是MotionEvent类的常量。如ACTION_DOWN,ACTION_MOVE等等。
不同的操作,打印不同的话。
最后还有setOnKeyClickListener
button.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
//keyCode是一个整型,键盘上通过不同的按键对应着不同的值,我们可以通过这种思想,实现用键盘来操控组件。
//a:29
System.out.println(keyCode);
if(29==keyCode){
button.setX(button.getX()-20);
}else
if(32==keyCode){
button.setX(button.getX()+20);
}else
if(51==keyCode){
button.setY(button.getY()-20);
}else
if(47==keyCode){
button.setY(button.getY()+20);
}
return false;
}
});
实现了用WASD,来控制,组件的移动。
相关推荐
Servlet中的八大Listener.docServlet中的八大Listener.docServlet中的八大Listener.docServlet中的八大Listener.docServlet中的八大Listener.docServlet中的八大Listener.docServlet中的八大Listener.docServlet中的...
ORA-12541 TNSno listener 的解决方案 ORA-12541 TNSno listener 的解决方案
SpringBoot整合Listener的两种方式: 1.通过注解扫描完成Listener组件的注册 1.创建一个类实现 ServletContextListener (具体实现哪个Listener根据情况来判断) 2.在类上加入注解 @WebListener 3.重写 context...
listener-tnsnamelistener-tnsnamelistener-tnsnamelistener-tnsnamelistener-tnsnamelistener-tnsnamelistener-tnsnamelistener-tnsname
Listener监听器 JavaBean Servlet Jsp XML HTML JAVA WEB开发技术 Listener监听器 事件监听器用于对程序中发生的事件进行监听,在监听的过程中会涉及几个重要组成部分: 事件(Event) 事件源 事件处理器 事件监听器...
针对Oracle的TNS listener的攻击原理及方法介绍。。。
Unity 网络 之 TcpListener 实现简单的网络服务器和客户端通讯功能封装(可监听多个客户端) 在Unity中用 TcpClient、TcpListener 两个封装类和 NetworkStream 来实现一个简单的网络通讯 demo 实现原理 1、首先...
c# socket 、TCPClient、TCPListener 用法详解.doc
TcpClient TcpListener Demo 案例 TcpClient TcpListener Demo 案例 TcpClient TcpListener Demo 案例 TcpClient TcpListener Demo 案例 QQ:574311505
配置ORACLE的listener.ora、tnsnames.ora
C#,winform,Tcp通信源码 使用TcpListener和TcpClient 源码 Tcp通信源码TcpListener和TcpClient 源码
本实例使用TcpClient/TcpListener类结合网络流建立一个客户机/服务器程序,实现文件的网络传输。
listener监听器小例子
Android Listener侦听的N种写法
C#Winform使用TCPListener和TCPClient加多线程编程实现客户端服务器端聊天模式,使用委托避免控件访问异常
java jsp listener小用法,记录登录次数。
TcpListener 监听服务端,可实现多客户端连接
c# tcplistener tcp 监控
认识oracle中的sqlnet.ora tnsnames.ora listener.ora三个文件
C# TcpListener/TcpClient Demo