onTouch方法实现按钮的检测

onTouch的方法需要实现 implements View.OnTouchListener接口
下面是我的xml代码简单定义几个按钮

 <Button
            android:id="@+id/up"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="上"/>
            
            <Button
                android:id="@+id/left"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="左"/>

            <Button
                android:id="@+id/right"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="右"/>
        </LinearLayout>

        <Button
            android:id="@+id/down"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="下"/>

java.代码

 //register event
        findViewById(R.id.up).setOnTouchListener(this);
        findViewById(R.id.left).setOnTouchListener(this);
        findViewById(R.id.right).setOnTouchListener(this);
        findViewById(R.id.down).setOnTouchListener(this);
  @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
            //getAction:触摸动作的原始32位信息,包括事件的动作,触控点信息 
        int action = arg1.getAction();
        
        //ACTION_CANCEL离开按键去屏幕的其他地方,或者直接提起手离开屏幕
        if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
            ptz = PTZ.Stop;
            //当按下一,手势一直不保持不动,判断为按下
        } else if (action == MotionEvent.ACTION_DOWN) {
            int viewId = arg0.getId();
            switch (viewId) {
                case R.id.up:
                   //你想要干的事情
                    break;
                case R.id.down:
                   //你想要干的事情
                    break;
                case R.id.left:
                    //你想要干的事情
                    break;
                case R.id.right:
                     //你想要干的事情
                    break;
            }
        }
     
        return false;
    }
    }
在 Android 中,可以通过实现 `View.OnTouchListener` 接口来监听按钮的各种触摸事件,然后根据触摸事件的类型来判断按钮是单击、双击还是长按。 下面是一个示例代码,演示如何检测一个按钮的单击、双击和长按事件: ```java button.setOnTouchListener(new View.OnTouchListener() { private long lastClickTime = 0; private boolean isLongClick = false; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 按下时记录当前时间 long currentTime = System.currentTimeMillis(); if (currentTime - lastClickTime <= 500) { // 如果距离上次点击时间不超过 500ms,则认为是双击 isLongClick = false; onDoubleClick(); } else { // 否则认为是单击或长按 isLongClick = true; onSingleClick(); } lastClickTime = currentTime; break; case MotionEvent.ACTION_UP: if (isLongClick) { // 如果是长按,则抬起手指后触发长按事件 onLongClick(); } break; } return true; } }); private void onSingleClick() { // 处理单击事件 } private void onDoubleClick() { // 处理双击事件 } private void onLongClick() { // 处理长按事件 } ``` 在上面的代码中,我们通过记录上次点击的时间和当前点击的时间来判断按钮是否是双击事件。如果距离上次点击时间不超过 500 毫秒,则认为是双击事件;否则认为是单击或长按事件。 在 `MotionEvent.ACTION_DOWN` 事件中处理单击和长按事件,在 `MotionEvent.ACTION_UP` 事件中处理长按事件。如果在 `ACTION_DOWN` 事件中判断是长按事件,则在 `ACTION_UP` 事件中触发长按事件处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值