Android自定义控件——自定义控件双击事件

来源:互联网 发布:app软件定制 编辑:程序博客网 时间:2024/06/05 13:24
本文介绍给自定义的控件加统一的双击监听事件,当然也可以对原生控件加本文通过一个Button来演示原理很简单,自定义一个接口 DoubleClickListener,定义抽象方法  onDoubleClick(View view);在touch事件中对 Button做具体的计算,通过两次计算系统时间的毫秒数的差值来判断是否是是双击。自定义Button:继承Button,构造方法中初始化clicktime的值,touch事件计算,定义接口和方法,定义给Button设置接口的方法public class DoubleButton extends Button {DoubleClickListener mDoubleClickListener;private long mClick_time;public DoubleButton(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init();}public DoubleButton(Context context, AttributeSet attrs) {super(context, attrs);init();}public DoubleButton(Context context) {super(context);init();}private void init() {mClick_time = System.currentTimeMillis();Log.i("ABC", "mClick_time=" + System.currentTimeMillis());}        //<span style="font-family: 'Microsoft YaHei';font-size:14px;">给Button监听接口的方法</span>public void setOnDoubleClickListener(final DoubleClickListener mDoubleClickListener) {this.mDoubleClickListener = mDoubleClickListener;}@Overridepublic boolean onTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {long newClickTime = System.currentTimeMillis();Log.i("ABC", "newClickTime=" + System.currentTimeMillis());Log.i("ABC", "cha=" + (newClickTime - mClick_time));if (newClickTime - mClick_time < 1000) {//调用双击事件mDoubleClickListener.onDoubleClick(this);}mClick_time = newClickTime;}return super.onTouchEvent(event);}        //接口interface DoubleClickListener {public abstract void onDoubleClick(View view);}}在界面中使用Xml中:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <com.example.test.DoubleButton        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:layout_marginLeft="30dp"        android:layout_marginTop="26dp"        android:text="Button" /></RelativeLayout>Activity中:public class MainActivity extends ActionBarActivity {DoubleButton mButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mButton = (DoubleButton) findViewById(R.id.button1);//监听,是不是和onclick一样啊好用啊mButton.setOnDoubleClickListener(new DoubleClickListener() {@Overridepublic void onDoubleClick(View view) {// TODO Auto-generated method stubToast.makeText(getBaseContext(), "Down", Toast.LENGTH_SHORT).show();}});}}顺便加一个好用的防止连续点击的方法,加在点击事件中就可以用了。麻麻再也不用担心你的按钮被人狂点了private static boolean isClick() {long time = System.currentTimeMillis();long timeDur = time - mLastTime;if (timeDur > 500) {mLastTime = time;return true;} else {return false;}}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 单位派我去进修我没去怎么办 老师在教育学生学生跑出教室怎么办 孩子遇到校园暴力回来不敢说怎么办 学位网没有英文认证出国留学怎么办 4-5岁幼儿记忆不好该怎么办 2个月宝宝不拉大便怎么办 论文已查重了要下载查重报告怎么办 华为畅享7手机媒体音量小怎么办 杂志投稿投到了假的网站怎么办 支付宝骗了5万多怎么办 微信转账到银行卡被骗了怎么办 给对方转账到银行卡疑似被骗怎么办 谷歌邮箱收不到邮件了怎么办 我在微信上做兼职被骗了钱怎么办 要是微信里面做兼职被骗了怎么办 在打离婚管斯死亡赔常金怎么办 编辑部回复我文章没有被录用怎么办 父亲死后教师资格被别人顶替怎么办 刚发的论文影响因子变化了怎么办 奥鹏毕业论文过了提交时间了怎么办 手机电池被拿出来后时间不准怎么办 高中的孩子与同学相处不好怎么办 孩子在幼儿园不敢和老师说话怎么办 注册过万方医学网忘了用户名怎么办 狗咬了没破皮没出血有点疼怎么办 狗咬了没出血肿起来了怎么办 广州已经过了幼儿园报名时间怎么办 大专学费没交学校开始查了怎么办 如果申请留学的本科成绩不够怎么办 硕士读了三年无法毕业怎么办啊 孩子在美国读研读不下去怎么办? 在地割草中过失死亡法律^怎么办 高中毕业申请国外大学没录取怎么办 英国研究生老师没给写推荐信怎么办 申请悉尼大学博士奖学金被拒怎么办 硕士延迟毕业但被博士录取怎么办 考完初级职称还是不会做账怎么办 美国留学生在中国办日本签证怎么办 留学雅思过了gpa低怎么办澳洲 护士电子化注册用户名忘记了怎么办 护士电子化注册证书编码错误怎么办