我是Java / Android编程的新手/初学者。我一直试图这样做,当我在我的应用程序中按下一个给定的按钮时它会产生一个DTMF音,但是当我尝试使用setOnTouchListener时,Android Studio会向我显示该错误。它还为MotionEvent提供了一个错误,指出 Expression expected
以下是代码的重要部分:
boolean pressedCCW = false;
class SendCCWTone extends AsyncTask<Void,Void,Void>{
@Override
protected Void doInBackground(Void... arg0){
ToneGenerator toneGen;
toneGen = new ToneGenerator(AudioManager.STREAM_DTMF,100);
while(pressedCCW){
toneGen.startTone(ToneGenerator.TONE_DTMF_1);
}
toneGen.stopTone();
toneGen.release();
createLog("CCW");
return null;
}
}
final Button buttonCCW = (Button) findViewById(R.id.counter_clockwise);
buttonCCW.setOnTouchListener(new View.OnTouchListener(){// Where the error is
@Override
public boolean onTouch(View v, MotionEvent event){// Where the other error is located
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
if(pressedCCW == false){
pressedCCW = true;
new SendCCWTone().execute();
}
break;
case MotionEvent.ACTION_UP:
pressedCCW = false;
}
return true;
}
});
答案 0 :(得分:1)
您正在OnTouchListener
内创建setOnClickListener
。如果您需要TouchListener
,则应使用setOnTouchListener
代替setOnClickListener
buttonCCW.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event){
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
if(pressedCCW == false){
pressedCCW = true;
new SendCCWTone().execute();
}
break;
case MotionEvent.ACTION_UP:
pressedCCW = false;
}
return true;
}
});
答案 1 :(得分:0)
如果将setOnTouchListener放在活动的onCreate()方法中,则可以解决此问题。
答案 2 :(得分:-1)
尝试将此添加到您的代码中:
implements View.OnTouchListener
并使用setOnTouchListner而不是setOnClickListener。
buttonCCW.setOnListener(new View.OnTouchListener(){// Where the error is
@Override
public boolean onTouch(View v, MotionEvent event){// Where the other error is located
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
if(pressedCCW == false){
pressedCCW = true;
new SendCCWTone().execute();
}
break;
case MotionEvent.ACTION_UP:
pressedCCW = false;
}
return true;
}
});
答案 3 :(得分:-1)
不是使用setOnClickListener
,而是可以在XML中设置onClick并指向一个方法(它做同样的事情并且看起来更好)。在这种情况下,你有一个像produceSound这样的方法:
public void produceSound(View view) {
// your onClick method
}
并在活动的XML中,找到该按钮的位置counter_clockwise
,然后将android:onClick="produceSound"
添加到按钮的XML中。
如果您感到好奇,请点击此处:How exactly does the android:onClick XML attribute differ from setOnClickListener?
但是,如果您使用onTouch,那么您将不得不坚持其他人的建议。 XML不支持android:onTouch
属性。