覆盖ScrollView的滚动方法以处理水平滑动事件

时间:2015-09-30 05:16:26

标签: android scrollview

我想覆盖 ScrollView 的滚动方法(我不知道它用于处理滚动的功能),以便 EditText (带有垂直滚动条) )只有当y坐标(用于滑动手指/指针)的变化更大时,它才会在内部垂直滚动。如果x坐标的变化更大,则将调用另一个函数。

我该怎么办?这是一个澄清的代码结构。

@Override
public void scrollerFunction(aListener){
    public void actionPerformed(params)
        if(abs(startY-EndY) >= abs(startX-EndX))
            //scrollUp or scrollDown
        else
            anotherFunction();
}

2 个答案:

答案 0 :(得分:0)

您可以使用ScrollingMovementMethod()并使用EditText设置为setMovementMethod(new ScrollingMovementMethod())

yourEditText.setMovementMethod(new ScrollingMovementMethod(){
    @Override 
    public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event){
        //use MotionEvent to get touch position for your logic
    }
});
  

我还没有对代码进行测试,但它应该对您的问题有所了解。

<强>更新

ScrollVview的代码,其中EditText

scrollView.getViewTreeObserver().addOnScrollChangedListener(new OnScrollChangedListener() {

  @Override
  public void onScrollChanged() {
    //example
    if(abs(scrollView.getScrollY()-EndY)  >= abs(scrollView.getScrollX()-EndX) ){
      //scrollUp or scrollDown
    }else{
      anotherFunction();
    }
  }
});

答案 1 :(得分:0)

您可以覆盖onScrollChanged方法。

你可以试试这个---&gt;

@Override
public void onScrollChanged (int l, int t, int oldl, int oldt){
   // l Current horizontal scroll origin.
   // t Current vertical scroll origin.
   // oldl  Previous horizontal scroll origin.
   // oldt  Previous vertical scroll origin.
   if(abs(oldt-t) >= abs(oldl-l))
     //scrollUp or scrollDown
   else
     anotherFunction();
}

试一试。我不知道它是否有效。

Source