单击事件很简单,这里只说一个问题:isPressed()方法。
- /**
- *点击事件
- *
- *@authormark
- *
- */
- finalclassClickListenerimplementsOnClickListener{
- @Override
- publicvoidonClick(Viewv){
- switch(v.getId()){
- caseBTN:
- if(v.isPressed()){
- btn.setText("单击按钮成功!");
- }else{
- btn.setBackgroundColor(Color.BLUE);
- }
- /*if(!v.isPressed()){
- btn.setBackgroundColor(Color.BLUE);
- }*/
- break;
- }
- }
- }
点击Button可以触发该事件,if (v.isPressed()) 下面的代码可以执行,但是如 else 后面的或者注释掉的 if(! v.isPressed()) 代码不会被执行。
如果你想捕捉Button的按下与弹起的动作,需要实现OnTouchListener接口。最后再说这个问题
在开发中需要将长按事件如单击事件一起使用,现在我们去实现。写长按事件的代码:
- /**
- *长按事件
- *
- *@authormark
- *
- */
- finalclassLongListenerimplementsOnLongClickListener{
- @Override
- publicbooleanonLongClick(Viewv){
- btn.setText("长按按钮成功!");
- returnfalse;
- }
- }
- btn.setOnClickListener(newClickListener());
- btn.setOnLongClickListener(newLongListener());
很简单,那就是在OnLongClickListener 事件中处理事件之后,告诉其它事件(这里是单击事件onClick)不要再来参与即可。修改代码如下:
- /**
- *长按事件
- *
- *@authormark
- *
- */
- finalclassLongListenerimplementsOnLongClickListener{
- @Override
- publicbooleanonLongClick(Viewv){
- btn.setText("长按按钮成功!");
- //returnfalse;
- returntrue;
- }
- }
可以看出,单击事件与长按事件分开了。
最后,我们讨论一下如何捕捉Button 的按下与弹起事件。实现代码:
- /**
- *触摸事件
- *
- *@authormark
- *
- */
- finalclassTouchListenerimplementsOnTouchListener{
- @Override
- publicbooleanonTouch(Viewv,MotionEventevent){
- if(event.getAction()==KeyEvent.ACTION_DOWN){
- btn.setText("已经按下按钮");
- }
- if(event.getAction()==KeyEvent.ACTION_UP){
- btn.setText("按钮已经弹起");
- }
- returntrue;//返回true的话,单击事件、长按事件不可以被触发
- //returnfalse;
- }
- }
- packagemark.zhang;
- importandroid.app.Activity;
- importandroid.graphics.Color;
- importandroid.os.Bundle;
- importandroid.util.Log;
- importandroid.view.Gravity;
- importandroid.view.KeyEvent;
- importandroid.view.MotionEvent;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.view.View.OnLongClickListener;
- importandroid.view.View.OnTouchListener;
- importandroid.widget.Button;
- importandroid.widget.LinearLayout;
- publicclassTestActivityextendsActivity{
- privatestaticfinalintBTN=0x10;
- privateButtonbtn=null;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- //必须先装载该布局文件,否则报空指针异常
- setContentView(R.layout.main);
- LinearLayoutll=(LinearLayout)findViewById(R.id.ll);
- //布局参数设定
- LinearLayout.LayoutParamslp=newLinearLayout.LayoutParams(120,50);
- lp.gravity=Gravity.CENTER;
- //创建Button并设置参数
- btn=newButton(this);
- btn.setText("Clickme");
- btn.setId(BTN);
- btn.setLayoutParams(lp);
- //加入当前视图
- ll.addView(btn);
- //为Button设置监听器
- btn.setOnClickListener(newClickListener());
- btn.setOnTouchListener(newTouchListener());
- btn.setOnLongClickListener(newLongListener());
- }
- /**
- *点击事件
- *
- *@authormark
- *
- */
- finalclassClickListenerimplementsOnClickListener{
- @Override
- publicvoidonClick(Viewv){
- switch(v.getId()){
- caseBTN:
- if(v.isPressed()){
- btn.setText("单击按钮成功!");
- Log.d("mark","onclick");
- }else{
- btn.setBackgroundColor(Color.BLUE);
- }
- /*
- *if(!v.isPressed()){btn.setBackgroundColor(Color.BLUE);}
- */
- break;
- }
- }
- }
- /**
- *长按事件
- *
- *@authormark
- *
- */
- finalclassLongListenerimplementsOnLongClickListener{
- @Override
- publicbooleanonLongClick(Viewv){
- btn.setText("长按按钮成功!");
- //returnfalse;
- returntrue;
- }
- }
- /**
- *触摸事件
- *
- *@authormark
- *
- */
- finalclassTouchListenerimplementsOnTouchListener{
- @Override
- publicbooleanonTouch(Viewv,MotionEventevent){
- if(event.getAction()==KeyEvent.ACTION_DOWN){
- btn.setText("已经按下按钮");
- }
- if(event.getAction()==KeyEvent.ACTION_UP){
- btn.setText("按钮已经弹起");
- }
- returntrue;//返回true的话,单击事件、长按事件不可以被触发
- //returnfalse;
- }
- }
- }