Android ImageButton 慢点击响应 Inside a ScrollView

Android ImageButton slow click response Inside a ScrollView

我一直在 ScrollView 中使用按钮,但如果我使用以下代码,ImageButton 的执行速度会大大降低。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/scrollView2"
        android:clickable="true"
        android:layout_gravity="center">
        <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        android:paddingTop="10dip"
        android:background="@android:color/darker_gray">
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/custombtn"
                android:id="@+id/button5"
                android:src="@drawable/favorites"
                android:minHeight="90dip"
                android:singleLine="false"
                android:minWidth="90dip"
                android:layout_marginRight="10dp" />
        </LinearLayout>
    </ScrollView>
</LinearLayout>

如何将所有内容保留在 ScrollView 中并使 ImageButton onTouchEvent 更快?

我假设 ScrollView 覆盖了整个层,一旦我尝试按下 ImageButton,它实际上首先与 ScrollView 交互,然后是 ImageButton,即 "behind" 它。我的假设正确吗?我该如何正确执行此操作?

提前谢谢你。

ScrollView 中的按钮在按下时响应相对较慢的原因是因为在确定触摸是 scroll/swipe 事件的开始还是长事件的开始时存在轻微的延迟新闻发布会。

此延迟是为了避免在用户实际滚动但恰好在按钮上开始滑动时将按钮设置为按下动画。

但是,如果您在 ScrollView 内快速点击一个按钮,您会发现响应良好。

要使按钮响应更快,您可以扩展按钮 class 并按照 How can I make a Button more responsive? 中的建议覆盖 onTouchEnd 方法。

public boolean onTouchEvent (MotionEvent event) {

    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        setPressed(true);
    }

    return super.onTouchEvent(event);
}