UI效果(7): Button的那点事_02
来源:互联网 发布:csgo优化参数 编辑:程序博客网 时间:2024/05/24 06:39
如果你对UI效果(4): Button的那点事_01感兴趣,可以看看。
该篇博客,分享Button的绑定事件如OnTouchListener、OnCliskListener、OnLongClickListener以及注意事项。
单击事件很简单,这里只说一个问题:isPressed()方法。
/** * 点击事件 * * @author mark * */final class ClickListener implements OnClickListener {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic boolean onLongClick(View v) {btn.setText("长按按钮成功!");// return false;return true;}}
可以看出,单击事件与长按事件分开了。
最后,我们讨论一下如何捕捉Button 的按下与弹起事件。实现代码:
/** * 触摸事件 * * @author mark * */final class TouchListener implements OnTouchListener {@Overridepublic 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;@Overridepublic 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 {@Overridepublic 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 {@Overridepublic boolean onLongClick(View v) {btn.setText("长按按钮成功!");// return false;return true;}}/** * 触摸事件 * * @author mark * */final class TouchListener implements OnTouchListener {@Overridepublic 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;}}}
- UI效果(7): Button的那点事_02
- UI效果(4): Button的那点事_01
- 网络、线程、UI的那点事
- c#窗体那点事Button
- Telerik Kendo UI 那点事[1]
- Android UI适配那点事
- jquery ui slider那点事
- (转)Android中Button、ListView、GridView的按键UI效果
- UI那点事—从我的经历看GUI发展
- 男的那点事
- 质数的那点事
- printk的那点事
- 拓展的那点事
- 装修的那点事
- 邮件的那点事
- 指针的那点事
- 工作的那点事
- 中秋的那点事
- 【转】JDK中的URLConnection参数详解
- nmon on Linux 常用参数
- winform图片裁剪
- xml中dtd中ELEMENT元素的类型种类
- javascript 定时器. setInterval 用法补充1
- UI效果(7): Button的那点事_02
- Yenta开发中:Shell 脚本
- Script & Tool之MXD修改数据源
- MyEclipse快捷键
- 【转】安装jdk配置环境变量并测试java
- 如何利用APC缓冲PHP脚本来提高服务器性能
- 近百本精品图书全部免费赠送——仅面向学生
- 自学之路--马士兵
- 15个Google面试题以及答案~~~~你会几个?