如何在不取消滚动的情况下检测TextView上的fling?

时间:2012-10-15 11:34:37

标签: android scroll textview onfling

尝试使用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()似乎是因为文本视图滚动在手指被抬起后不再继续。这是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>

有什么方法可以保持普通的滚动行为并且仍能检测到这种情况?

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

2 个答案:

答案 0 :(得分:2)

滚动和投掷事件之间的区别在于用户在移动结束时抬起手指以使其成为一种投掷。 (而且速度更快)。

因此,我认为不可能将两个事件组合起来(因为它们)类似于检测(在结束它们之前)正在执行哪个事件。 同样从用户的角度来看,同时使用两种手势会造成混淆(由于相似性)。

所以答案是:没有办法保持普通的滚动行为并且仍然可以检测到这种情况。

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

答案 1 :(得分:0)

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