1

尝试使用 simpleGestureDetector 检测 TextView 上的投掷:

public void onCreate(Bundle savedInstanceState) {

    ...

    textContent.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent ev) {
                return gestureDetector.onTouchEvent(ev);
        }        
    });
}

class MyGestureDetector extends SimpleOnGestureListener {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

            if(foo) {
                fooBar();
                return true;
            }
        return super.onFling(e1, e2, velocityX, velocityY);
    }
} 

从某种意义上说,fooBar()如果满足条件,我的代码就会运行foo,但我发现的问题是,当条件不满足时,返回 super.onFling() 会导致取消投掷,因为 textview手指抬起后,滚动不再继续。这是 XML:

<RelativeLayout
    android:id="@+id/main_area"
    android:layout_height="match_parent"
    android:layout_width="match_parent">
    <TextView
        android:id="@+id/main_text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dp"
        android:textSize="16dp"
        android:lineSpacingExtra="2dip"
    />
</RelativeLayout>

有什么办法可以保持普通的滚动行为并仍然检测到投掷?

编辑:对不起,我的错,这与手势检测器无关,这只是因为我将 TextView 从其 ScrollView 中取出 - 由于某种原因,TextViews 似乎没有像 ScrollViews 那样平滑(惯性)滚动。

4

2 回答 2

2

scroll 和 fling 事件之间的区别在于用户在移动结束时抬起手指以使其成为 fling。(而且速度更高)。

因此,我认为不可能将这两个事件结合起来,因为它们(太)相似于检测(在结束它们之前)正在执行哪个事件。同样从用户的角度来看,同时使用两种手势是令人困惑的(由于相似性)。

所以答案是:不,没有办法保持普通的滚动行为并且仍然检测到投掷。

(至少我过去尝试过并且没有成功以正确的方式使用这两个事件)

于 2012-10-15T11:45:14.207 回答
0

我不确定这是否会是您的问题,但是true如果您的条件满足,您为什么要返回?如果您不希望使用该事件,则应返回false(或super.onFling)。这就是返回值的用途。

于 2012-10-15T11:41:50.790 回答