android自定义长按事件

     今天在论坛被一个问题难住了,有个哥们发帖子,问如何把MotionEvent.ACTION_DOWN变成长按事件,实际也就是用MotionEvent.ACTION_DOWN来代替OnLongClickListener,而且需要自定义按下多长时间后执行.这个在以前还真是没做过,那么今天就这个问题来做个小例子吧!

         首先创建一个项目,这个很简单了,不必再提.直接附上布局代码:

activity_main:

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.longpresstoast.MainActivity" >

    <TextView
        android:id="@+id/tv_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" 
        android:background="@android:color/holo_blue_bright"/>

</RelativeLayout>
这个简单修改一下就可以了,那么附上MainActivity中的关键部分:

首先我们要找到这个TextView,代码如下:

tvContent = (TextView) findViewById(R.id.tv_content);
		tvContent.setOnTouchListener(this);
这里设置的是OnTouchListener,是不是很熟悉啊,那么这么写就需要你的Activity实现OnTouchListener接口中的回调方法--onTouch,代码如下:

switch (event.getAction() & MotionEvent.ACTION_MASK) {
		case MotionEvent.ACTION_DOWN:
			lpt = new LongPressedToast();
			handler.postDelayed(lpt,LONG_PRESSED_TIME);
			break;
		}
		return true;
为什么使用 event.getAction() & MotionEvent.ACTION_MASK哪?下面先来述说这个ACTION_MASK,解释如下:

ACTION_MASK在Android中是应用于多点触摸操作,字面上的意思大概是动作掩码的意思吧。
在onTouchEvent(MotionEvent event)中,使用switch (event.getAction())可以处理ACTION_DOWN和ACTION_UP事件;
使用switch (event.getAction() & MotionEvent.ACTION_MASK)就可以处理处理多点触摸的ACTION_POINTER_DOWN和ACTION_POINTER_UP事件。 
ACTION_DOWN和ACTION_UP就是单点触摸屏幕,按下去和放开的操作;
ACTION_POINTER_DOWN和ACTION_POINTER_UP就是多点触摸屏幕,当有一只手指按下去的时候,另一只手指按下和放开的动作捕捉;
ACTION_MOVE就是手指在屏幕上移动的操作;
对,使用这个 MotionEvent.ACTION_MASK就是为了支持多点触控,这个地方我不太懂,所以在这里记录一下.

      还有就是调用handler的postDelayed()方法,一共有两个参数,前一个是Runnable 接口,后一个是指定延迟的时间,也就是多长时间后执行Runnable中的方法.下面需要说的就是这个LongPressedToast,这个是我自己定义的一个内部类,代码如下:

private class LongPressedToast implements Runnable{

		@Override
		public void run() {
			Toast.makeText(getApplicationContext(), "***", Toast.LENGTH_SHORT).show();
		}
	}
这个很简单,就是实现Runnable中的run方法,那么在你手指按下屏幕的时候,延时一段时间就会执行出现Toast的行为,这个延迟执行的时间需要由LongPressedTime来定义,当你按下后,延迟自定的时间后,会弹出这个Toast,所以这个就是我们需要的效果!

这个例子的应用在于可以控制按下后延迟多长时间执行,特此记录下!

代码实例下载:
http://download.csdn.net/detail/u010665691/8139415

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值