android dispatchtouchevent 用法,android – 检测每个触摸事件,而不会覆盖dispatchTouchEvent()?...

本文介绍了如何通过创建自定义Window.Callback实现来拦截Activity的TouchEvent,避免覆盖dispatchTouchEvent方法,适合编程库开发者。详细展示了MyWindowCallback类的各个方法,以及如何在其中处理触摸事件。
摘要由CSDN通过智能技术生成

回答这可能对他人有帮助.答案将有助于需要拦截触摸事件的库.

如果你不想覆盖dispatchTouchEvent()(Imp,如果你是编程库)方法的活动,那么我们可以使用Window.Callback类.创建您自己的Window.Callback实现作为下面的代码,然后将其设置为从您的活动回调Window对象.

在下面的代码片段中,为您获取的Activity上下文实例做.

//set Window.Callback for getting touch event

final Window win = context.getWindow();

final Window.Callback localCallback = win.getCallback();

win.setCallback(new MyWindowCallback(localCallback));

MyWindowCallback类将为:

您将在MyWindowCallback的dispatchTouchEventMethod()中获取TouchEvent,您可以根据需要使用这些.

import android.annotation.SuppressLint;

import android.util.Log;

import android.view.ActionMode;

import android.view.KeyEvent;

import android.view.Menu;

import android.view.MenuItem;

import android.view.MotionEvent;

import android.view.View;

import android.view.Window;

import android.view.WindowManager;

import android.view.accessibility.AccessibilityEvent;

public class MyWindowCallback implements Window.Callback{

Window.Callback localCallback;

public MyWindowCallback(Window.Callback localCallback) {

this.localCallback = localCallback;

}

@Override

public boolean dispatchKeyEvent(KeyEvent event) {

return localCallback.dispatchKeyEvent(event);

}

@SuppressLint("NewApi")

@Override

public boolean dispatchKeyShortcutEvent(KeyEvent event) {

return localCallback.dispatchKeyShortcutEvent(event);

}

@Override

public boolean dispatchTouchEvent(MotionEvent event) {

//YOU WILL GET TOUCH EVENTS HERE>> USE AS required>>

return localCallback.dispatchTouchEvent(event);

}

@Override

public boolean dispatchTrackballEvent(MotionEvent event) {

return localCallback.dispatchTrackballEvent(event);

}

@SuppressLint("NewApi")

@Override

public boolean dispatchGenericMotionEvent(MotionEvent event) {

return localCallback.dispatchGenericMotionEvent(event);

}

@Override

public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {

return localCallback.dispatchPopulateAccessibilityEvent(event);

}

@Override

public View onCreatePanelView(int featureId) {

return localCallback.onCreatePanelView(featureId);

}

@Override

public boolean onCreatePanelMenu(int featureId,Menu menu) {

return localCallback.onCreatePanelMenu(featureId,menu);

}

@Override

public boolean onPreparePanel(int featureId,View view,Menu menu) {

boolean ret = localCallback.onPreparePanel(featureId,view,menu);

return ret;

}

@Override

public boolean onMenuOpened(int featureId,Menu menu) {

return localCallback.onMenuOpened(featureId,menu);

}

@Override

public boolean onMenuItemSelected(int featureId,MenuItem item) {

return localCallback.onMenuItemSelected(featureId,item);

}

@Override

public void onWindowAttributesChanged(WindowManager.LayoutParams attrs) {

localCallback.onWindowAttributesChanged(attrs);

}

@Override

public void onContentChanged() {

localCallback.onContentChanged();

}

@Override

public void onWindowFocusChanged(boolean hasFocus) {

Log.d("","ttest onfocus changed called");

localCallback.onWindowFocusChanged(hasFocus);

}

@Override

public void onAttachedToWindow() {

localCallback.onAttachedToWindow();

}

@Override

public void onDetachedFromWindow() {

localCallback.onDetachedFromWindow();

}

@Override

public void onPanelClosed(int featureId,Menu menu) {

localCallback.onPanelClosed(featureId,menu);

}

@Override

public boolean onSearchRequested() {

return localCallback.onSearchRequested();

}

@SuppressLint("NewApi")

@Override

public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {

return localCallback.onWindowStartingActionMode(callback);

}

@SuppressLint("NewApi")

@Override

public void onActionModeStarted(ActionMode mode) {

localCallback.onActionModeStarted(mode);

}

@SuppressLint("NewApi")

@Override

public void onActionModeFinished(ActionMode mode) {

localCallback.onActionModeFinished(mode);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值