我正在开发另一个团队使用的UI元素。我在画布上做了一些绘画,但部分是透明的。我希望这些部分在主要活动中不可触及,而不必编写额外的代码 - 因此,如果它们实现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;
}
如果没有从存在视图的片段定义touchlistener,这可以正常工作,但如果用户定义了自己的touchlistener,则不会首先调用此触摸器(如预期的那样)。有没有办法修改touchlistener检查的顺序,或者更改此视图的可触摸区域而不从调用活动或片段中编写任何代码?
答案 0 :(得分:1)
覆盖setOnTouchListener
。在其代码中,调用super.setOnTouchListener
方法传入执行触摸检查的新OnTouchListener
,然后执行作为参数传递的onTouch
OnTouchListener
方法。 setOnTouchListener
。最后,将setOnTouchListener
设为final,因为它不能被子类覆盖。