我正在开发供其他团队使用的 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/