第09讲常见事件响应2
1. 长按事件:onLongClickListener
添加button按钮(button1),在onCreate方法中通过findViewById找到button,之后设置点击button的长按响应。
Button button=(Button) findViewById(R.id.button1);
button.setOnLongClickListener(new OnLongClickListener(){
publicboolean onLongClick(View v) {
System.out.println("button长按事件。。。");
return false;
}
});
onLongClick 的返回值是一个boolean类型值:
false:长按之后,后面也可以使用该button产生响应(如果再添加一个单机事件,会伴随有单击事件);
true:长按之后,该长按事件消耗了该单击事件。
2. 滑动事件:onTouchListener
Button button = (Button)findViewById(R.id.button1);
button.setOnTouchListener(newOnTouchListener() {
public boolean onTouch(View v, MotionEventevent) {
int actiontype=event.getAction();
if(actiontype==MotionEvent.ACTION_DOWN){
System.out.println("touchdown..."); //在DDMS的LogCat有输出
}
else if(actiontype==MotionEvent.ACTION_MOVE){
System.out.println("touch move...");
}
else if(actiontype==MotionEvent.ACTION_UP){
System.out.println("touch up");
}
else {
}
return true;
}
});
event对象记录了事件发生的现场情况,比如单击位置
元事件:action_down(点击鼠标),action_up(松开鼠标),action_move(移动鼠标)。各种事件是由元事件组成的。
移动button的案例:
首先,获取组件的容器layout。要引用该容器,需要给layout确定ID值。在layout的根节点中,添加 android:id="@+id/layout01"
其次,在mainactivity.java中找到该layout,赋值给Viewgroup,直接对viewGroup进行OnTouch操作。Viewgroup是个容器,可以装下各种组件(view)。
然后改变button在布局上的位置(需要将button设置为final类型)
ViewGroup viewGroup=(ViewGroup)findViewById(R.id.layout01);
final Buttonbutton=(Button) findViewById(R.id.button1);
viewGroup.setOnTouchListener(newOnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int actiontype=event.getAction();
if(actiontype==MotionEvent.ACTION_DOWN){
System.out.println("touchdown...");
}
else if(actiontype==MotionEvent.ACTION_MOVE){
System.out.println("touch move...");
button.setX(event.getX()); //设置button的X坐标
button.setY(event.getY());
}
else if(actiontype==MotionEvent.ACTION_UP){
System.out.println("touch up");
}
return true;
}
});
3.键盘事件OnKeyListener
final Button button =(Button) findViewById(R.id.button1);
button.setOnKeyListener(newOnKeyListener(){
public boolean onKey(Viewv, int keyCode, KeyEvent event){
//a:29 w:51 s:47 d:32
System.out.println(keyCode);
if(29==keyCode){
button.setX(button.getX()-20); //点击a后,案件button向左移动20
}elseif(32==keyCode){
button.setX(button.getX()+20);
}elseif(51==keyCode){
button.setY(button.getY()-20);
}elseif(47==keyCode){
button.setY(button.getY()+20);
}
return false;
}
});
4.焦点事件OnFocusChangeListener
焦点事件跟我们的JS的焦点事件基本一个性质。但是Android得到焦点和失去焦点都在同个方法内运行
随便拖一个TextBox在安卓里面叫EditText,输入事件代码:
Button button = (Button) findViewById(R.id.button1);
button.setOnFocusChangeListener(newOnFocusChangeListener(){
publicvoid onFocusChange(View v,boolean hasFocus){
System.out.println("button焦点事件。。。。");
}
});
可通过点击“Tab”键,显示输出"button 焦点事件。。。。"