Android的 - 禁用滚动按住按钮

Sam*_*ehi 0 android ontouchlistener android-scrollview android-button motionevent

我心中已经有了一个Button内部ScrollView

<ScrollView>
    <LinearLayout>
        ...
        <Button/>
        ...
    <LinearLayout/>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)

我正在使用此按钮来记录语音。当它捕获到MotionEvent.ACTION_DOWN事件时,我开始重新编码,并在MotionEvent.ACTION_DOWN事件停止时将其停止。

buttomRecord.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            startRecording();
            return true;
        }
        else if(event.getAction() == MotionEvent.ACTION_UP){
            stopRecording();
            return true;
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

当用户录制语音,如果这个问题是ScrollView滚动向上或向下,该按钮就会失去焦点,从来没有抓MotionEvent.ACTION_UP事件。

怎样才能锁定焦点Button,而我拿着它或禁用ScrollView滚动?

Par*_* P. 6

您可以使用

mScrollView.requestDisallowInterceptTouchEvent(true);
Run Code Online (Sandbox Code Playgroud)

禁止触摸事件 scrollview

所以你的代码将是

    buttomRecord.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            startRecording();
            mScrollView.requestDisallowInterceptTouchEvent(true);
            return true;
        }
        else if(event.getAction() == MotionEvent.ACTION_UP){
            stopRecording();
            mScrollView.requestDisallowInterceptTouchEvent(false);
            return true;
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)