很简单。 OnTouchListener根本不起作用。
我相当肯定它正在被初始化。我使用自定义视图来绘制用户界面,并且像往常一样,我被Android的敏感API(双关语)所阻碍:
public class ViewInterface extends View implements OnTouchListener{
public ViewInterface(Context context){
super(context);
...
}
public void update(){
...
}
@Override
public void onDraw(Canvas canvas){
...
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
keyboardEnabled = true;
return true;
case MotionEvent.ACTION_UP:
keyboardEnabled = false;
return true;
default: break;
}
return false;
}
初始化主要活动中的视图的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//setContentView(R.layout.activity_aidan);
activity = this;
viewInterface = new ViewInterface(this);
setContentView(viewInterface);
initializeSpeechRecognition();
findMe();
run.start();
}
我错过了什么?在触摸屏幕并按住它时,keyboardEnabled应该设置为true(它只是一个调试值) - 但它没有做任何事情。触摸事件似乎根本没有响应。
我尝试使用以下代码使用View中内置的onTouchEvent方法:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
keyboardEnabled = true;
return true;
case MotionEvent.ACTION_UP:
keyboardEnabled = false;
return true;
default: break;
}
return false;
}
然而,这也不起作用。触摸事件根本没有响应 - 点击屏幕并释放应该将keyboardEnabled设置为false - 它没有。
答案 0 :(得分:3)
您应该覆盖onTouchEvent()
类的View
方法。
目前您只是实现OnTouchListener
接口,该接口应与setOnTouchListener()
方法结合使用。
例如:
@Override
public boolean onTouchEvent(MotionEvent event) {
// do whatever
}
不要忘记在适当的地方拨打super
!
或者,您可以在代码中的某处调用setOnTouchListener(this);
,但这似乎是多余的。