您的位置:首页 > 其它

OnTouchListener和OnCliskListener

2015-09-22 17:33 253 查看
在Android App应用中,OnTouch事件表示触摸事件,本章我们通过滑过图像获取当前位置理解其具体用法。

单击事件很简单,这里只说一个问题:isPressed()方法。

/**
* 点击事件
*
* @author mark
*
*/
final class ClickListener implements OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case BTN:
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接口。最后再说这个问题

在开发中需要将长按事件如单击事件一起使用,现在我们去实现。写长按事件的代码

/**
* 长按事件
*
* @author mark
*
*/
final class LongListener implements OnLongClickListener {
@Override
public boolean onLongClick(View v) {
btn.setText("长按按钮成功!");
return false;
}
}

为Button设置事件监听:

btn.setOnClickListener(new ClickListener());
btn.setOnLongClickListener(new LongListener());


运行之后会发现,长按该Button不仅可以触发长按事件,而且还会触发单击事件,怎么办?

很简单,那就是在OnLongClickListener 事件中处理事件之后,告诉其它事件(这里是单击事件onClick)不要再来参与即可。修改代码如下:

/**
* 长按事件
*
* @author mark
*
*/
final class LongListener implements OnLongClickListener {
@Override
public boolean onLongClick(View v) {
btn.setText("长按按钮成功!");
// return false;
return true;
}
}






可以看出,单击事件与长按事件分开了。

最后,我们讨论一下如何捕捉Button 的按下与弹起事件。实现代码:

/**
* 触摸事件
*
* @author mark
*
*/
final class TouchListener implements OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
btn.setText("已经按下按钮");
}
if (event.getAction() == KeyEvent.ACTION_UP) {
btn.setText("按钮已经弹起");
}
return true;// 返回true的话,单击事件、长按事件不可以被触发
// return false;
}
}

完整代码实例:

package mark.zhang;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.LinearLayout;
public class TestActivity extends Activity {
private static final int BTN = 0x10;
private Button btn = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 必须先装载该布局文件,否则报空指针异常
setContentView(R.layout.main);
LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
// 布局参数设定
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(120, 50);
lp.gravity = Gravity.CENTER;
// 创建Button并设置参数
btn = new Button(this);
btn.setText("Click me");
btn.setId(BTN);
btn.setLayoutParams(lp);
// 加入当前视图
ll.addView(btn);
// 为Button设置监听器
btn.setOnClickListener(new ClickListener());
btn.setOnTouchListener(new TouchListener());
btn.setOnLongClickListener(new LongListener());
}
/**
* 点击事件
*
* @author mark
*
*/
final class ClickListener implements OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case BTN:
if (v.isPressed()) {
btn.setText("单击按钮成功!");
Log.d("mark", "onclick");
} else {
btn.setBackgroundColor(Color.BLUE);
}
/*
* if (!v.isPressed()) { btn.setBackgroundColor(Color.BLUE); }
*/
break;
}
}
}
/**
* 长按事件
*
* @author mark
*
*/
final class LongListener implements OnLongClickListener {
@Override
public boolean onLongClick(View v) {
btn.setText("长按按钮成功!");
// return false;
return true;
}
}
/**
* 触摸事件
*
* @author mark
*
*/
final class TouchListener implements OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
btn.setText("已经按下按钮");
}
if (event.getAction() == KeyEvent.ACTION_UP) {
btn.setText("按钮已经弹起");
}
return true;// 返回true的话,单击事件、长按事件不可以被触发
// return false;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: