scollview启动时未检测到android.view.MotionEvent.ACTION_UP

时间:2015-01-28 09:42:07

标签: java android

我在ScrollView中放置了两个可触摸的TextView

 <ScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:isScrollContainer="false" 
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >    

        <TextView 
            android:id="@+id/restReviewRateText"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:text="@string/rest_review_rate_text"/>
        <TextView
            android:id="@+id/restReviewRateTextInc" 
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:text="@string/rest_review_rate_text_inc"/>
    </LinearLayout>
 </ScrollView>

onTouchEvent函数如下

 @Override
 public boolean onTouch(View v, MotionEvent event) {
     switch (v.getId()) {
     case R.id.restReviewRateText:
     case R.id.restReviewRateTextInc:
         if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
            Log.d("MY TAG", "I am here DOWN!!");
         } else if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
            Log.d("MY TAG", "I am here UP!!");

     }
         break;
     }
     return false;
 }

当页面在屏幕大小范围内时(例如页面不需要滚动),一切正常。我们可以检测到android.view.MotionEvent.ACTION_UP,无论我们在哪里触摸并抬起手。

然而,当页面尺寸大于屏幕尺寸时,当手触摸并移动时,页面滚动检测开始。在此期间,如果我们从TextView开始触摸,则可以检测到android.view.MotionEvent.ACTION_DOWN。然而,当我们移动(即滚动发生)时,触摸升起时未检测到android.view.MotionEvent.ACTION_UP。

即使滚动效果需要,我怎么能启用android.view.MotionEvent.ACTION_UP仍然可以检测到?或者有没有办法捕获用户在滚动动作开始后抬起手指(如果无法触发MotionEvent.ACTION_UP)?谢谢!

1 个答案:

答案 0 :(得分:0)

经过一番探索,找到了解决我问题的方法。问题是android.view.MotionEvent.ACTION_UP现在在ScrollView上。所以为了解决这个问题,我在ScrollView(上面的代码片段)中添加了一个id

<ScrollView
   android:id="@+id/reviewScrollView
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:isScrollContainer="false" 
   >

然后,我也将ScrollView注册到OnTouchListener。并在TOUCH UP时检测到它,如下所示

@Override
public boolean onTouch(View v, MotionEvent event) {
    switch (v.getId()) {
    case R.id.restReviewRateText:
    case R.id.restReviewRateTextInc:
        if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
           Log.d("MY TAG", "I am here DOWN!!");
        } else if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
           Log.d("MY TAG", "I am here UP!!");

        }
        break;
    case R.id.reviewScrollView:
        if (event.getAction() == android.view.MotionEvent.ACTION_UP)
           Log.d("MY TAG", "I am here UP!!");
        break;
    }
    return false;
}

有了这个,我可以在完成ACTION_UP时执行所需的功能,无论是TextView还是ScrollView。