setOnTouchListener onTouchEvent setOnClickListener

本文详细解析了Android中TextView触摸事件的触发机制,包括setOnTouchListener、onTouchEvent和OnClickListener之间的交互逻辑,以及它们如何响应触摸事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出处:http://lipeng88213.iteye.com/blog/1161450

package com.ex.touch;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;

public class MainActivity extends Activity {
	private TextView tx ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tx = (TextView)super.findViewById(R.id.textView);
		tx.setBackgroundColor(android.graphics.Color.RED);
		tx.setOnTouchListener(new OnTouchListener() {		
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				System.out.println("setOnTouchListener:X="+event.getRawX()+"Y="+event.getRawY());
				return false;
			}
		});
		
		tx.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
			System.out.println("OnClick");	
			}
		});
		
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		System.out.println("onTouchEvent:X="+event.getRawX()+"Y="+event.getRawY());
		return super.onTouchEvent(event);
	}
}


结论:
1、当在TextViw上触摸时 先触发setOnTouchLisener
   如果setOnTouchLisener返回false 会触发onTouchEvent 并且后续的move up都只会触发onTouchEvent
   如果setOnTouchLisener返回true 后续的move up 都只会触发setOnTouchLisener
2、当在其他位置触摸时 只会触发onTouchEvent
3、如果加上onClickListener时,
   如果setOnTouchLisener返回false 后续的move up都只会触发setOnTouchLisener;并且只有当up事件是在发生在textview上时 才会触发onclicklistener
   如果setOnTouchLisener返回true 后续的move up 也只会触发setOnTouchLisener 并且onclicklistner也不会执行


对了
当move触发setOnTouchLisener时 这个move不止是在TextView上 而是可以在整个activity上面

其实 这个很好理解 和http://lipeng88213.iteye.com/blog/1102048
是一样的

1、如果TextView的setonTouchListener返回为false 也就是说TextView不出来这个事件,这时就会向上传递给onTouchEvent 并且后续的也会直接传递给onTouchEvent
反之,就表明setonTouchListener处理这个事件
2、只要加上了onClickListener 就表明TextView会处理这个事件,但是事件会首先传递给setonTouchListener 如果它返回false 就会在up的时候出发click;如果它返回true,click就不会被执行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值