View点击触摸事件顺序记录

仅做记录
自定义view,没有多余的东西,只是打一个log

package com.example.testintercept;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

/**
 * Created by Android Studio
 * Date: 2021/1/27
 * Time: 17:03
 */
public class TestButton extends androidx.appcompat.widget.AppCompatButton {
    private static final String TAG = "TestButton";

    public TestButton(@NonNull Context context) {
        super(context);
    }

    public TestButton(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public TestButton(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @SuppressLint("ClickableViewAccessibility")
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        Log.e(TAG, "onTouchEvent: " ); 
      return  super.onTouchEvent(ev);
    }

}

mainActivity:

package com.example.testintercept

import android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.MotionEvent
import android.view.View
import android.widget.Toast
import com.example.testview.R
import kotlinx.android.synthetic.main.activity_test_view_on_intercept_touch_event.*

/**
 * 测试拦截
 *
 * 主要针对ViewGroup以及View拦截后对于onTouchEvent
 *
 */
class TestViewOnInterceptTouchEvent : AppCompatActivity(), View.OnClickListener {

    @SuppressLint("ClickableViewAccessibility")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_test_view_on_intercept_touch_event)
        ll_test2.setOnClickListener(this)
        test2_button.setOnClickListener(this)
        test2_button1.setOnClickListener(this)
        test2_button1.setOnLongClickListener {
            Log.e(Companion.TAG, "onCreate: test2_button1 setOnLongClickListener")
             true
        }
        test2_button1.setOnTouchListener( object :View.OnTouchListener{
            override fun onTouch(v: View?, event: MotionEvent?): Boolean {
                Log.e(TAG, "onTouch: setOnTouchListener" )
                 return false
            }

        })
    }

    override fun onClick(v: View) {
        when (v.id) {
            R.id.ll_test2 -> {
                Toast.makeText(this, "ll_test2", Toast.LENGTH_SHORT).show()
            }

            R.id.test2_button -> {
                Toast.makeText(this, test2_button.text, Toast.LENGTH_SHORT).show()
            }
            R.id.test2_button1 -> {
                Log.e(Companion.TAG, "onCreate: test2_button1 onClick")
                Toast.makeText(this, test2_button1.text, Toast.LENGTH_SHORT).show()
            }
        }
    }

    companion object {
        private const val TAG = "TestViewOnInterceptTouc"
    }
}

 test2_button1.setOnTouchListener( object :View.OnTouchListener{
            override fun onTouch(v: View?, event: MotionEvent?): Boolean {
                Log.e(TAG, "onTouch: setOnTouchListener" )
                 return false
            }

        })

返回true 时,表示事件自己处理,不会走自己定义的onTouchEvent方法,当然onclick与OnLongClickListener也不会运行。
如果返回false的时候,自己的OnTouchListener和onTouchEvent,onclick与OnLongClickListener也会相继调用。
所以事件的调度顺序应该是 onTouchListener > onTouchEvent > onLongClickListener 、 onClickListener。
暂时是这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值