java - 是否可以从 SurfaceView 的扩展中删除可触摸性?

标签 java android

我正在开发供其他团队使用的 UI 元素。我正在 Canvas 上画画,但其中一部分是透明的。我希望使这些部分在主 Activity 中不可触摸,而无需编写额外的代码 - 因此,如果他们实现 onTouchListener,它会首先检查 UI 元素以查看触摸是否在其可触摸区域内。这是我到目前为止所尝试过的:

public class Indicator extends SurfaceView implements OnTouchListener {

public Indicator(Context paramContext, AttributeSet paramAttributeSet) {
    super(paramContext, paramAttributeSet);
    setOnTouchListener(this);
    InitializeCalculations();
}

...

@Override
public boolean onTouch(View arg0, MotionEvent arg1) {

    if (arg1.isWithinTouchableArea)
    {
        Log.d("Indicator","Outside touched!");
        return false;
    }
    Log.d("Indicator","Inside touched!");
    return true;
}

如果 View 所在的 fragment 中没有定义触摸监听器,则此方法可以正常工作,但如果用户定义了自己的触摸监听器,则不会首先调用此监听器(如预期)。有没有办法修改触摸监听器检查的顺序,或者以其他方式更改此 View 的可触摸区域,而无需从调用 Activity 或 fragment 中编写任何代码?

最佳答案

覆盖 setOnTouchListener 。在其代码中,调用super.setOnTouchListener方法传入一个新的 OnTouchListener它执行您的触摸检查,然后执行 onTouch OnTouchListener的方法作为参数传递给您的覆盖 setOnTouchListener 。最后,制作setOnTouchListener Final,因为它不能被子类覆盖。

关于java - 是否可以从 SurfaceView 的扩展中删除可触摸性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22257393/

相关文章:

java - 谷歌应用程序引擎中的 Getkey() 返回 id

android - 获取 http ://schemas. android.com/apk/res/android 时出错

java - 从 CSV 字符串而不是文件解析

java - 在 MVP 中,onClick 是 View 还是 Presenter 的责任?

android - BroadcastReceiver 不会对外部 Intent 使用react

android - 如何让 exoplayer 播放 Drive 中的视频

Android Activity 重启

java - 尝试在 Android Studio 上使用 Room

java - jacoco maven 插件不报告测试覆盖率

java - 在 Android 数据绑定(bind)中将 "custom conversions"与 @BindingConversion 放在哪里?为什么?