第09讲 常见事件响应2

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 焦点事件。。。。"

原文地址:https://www.cnblogs.com/anyuan9/p/6171611.html