我的应用程序中有一个麦克风按钮,用户可以通过该按钮输入语音。它使用OnTouchListener来检测用户是否按下按钮。如果他们按住按钮但将手指拖到按钮外,即使它们不触摸屏幕,MotionEvent仍将动作视为“ ACTION_DOWN”,即使它们触摸屏幕边缘附近也是如此。我们需要进行更改,因此,如果用户将手指从按钮上移开,MotionEvent将变为“ ACTION_UP”。
recordBtn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
//User stops touching the button.
case MotionEvent.ACTION_UP:
if(isRecording) {
stopRecording();
isRecording = false;
}
break;
//User touches the button.
case MotionEvent.ACTION_DOWN:
if(!isRecording) {
startRecording();
isRecording = true;
}
break;
}
return false;
}
});
XML:
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.9">
<TextView
android:id="@+id/recordText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/custom_button"
android:layout_centerHorizontal="true"
android:layout_marginStart="8dp"
android:layout_marginTop="195dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:gravity="center"
android:fontFamily="sans-serif"
android:text="@string/hold_the_mic_and_record"
android:textColor="@color/white"
android:textSize="20sp"/>
<Button
android:id="@+id/custom_button"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerHorizontal="true"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:background="@drawable/microphone" />
</RelativeLayout>