如何在按下按钮时滚动ScrollView?

时间:2016-05-26 08:27:36

标签: android android-button android-scrollview

我的问题其实很简单,我无法找到办法在我的问题中提到的。我尝试使用AsyncTask,它根本不起作用,也使用了按钮的OnFocusChange事件......我现在有点绝望了。

希望你们能帮忙! :)

AsyncTask版本:

private void creationVoid(){
    (...)
    btScrollDown.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN)
                downPressed = true;
            if(event.getAction() == MotionEvent.ACTION_UP)
                downPressed = false;
            new ScrollDownTask().execute();
            return true;
        }
    });
(...)
}


private void scrollDown(){
    btScrollUp.setVisibility(View.VISIBLE);
    scrollView.scrollTo(scrollView.getScrollX(), scrollView.getScrollY() + 15);
    if(scrollView.getScrollY() == scrollView.getChildAt(scrollView.getChildCount()-1).getBottom() - 763) {
        btScrollDown.setVisibility(View.GONE);
    }
}

private class ScrollDownTask extends AsyncTask<String, Void, String>{
    @Override
    protected String doInBackground(String... params) {return null;}

    @Override
    protected void onPostExecute(String s) {
        while(downPressed)
            scrollDown();
    }
}

OnFocusChange版本:

private void creationVoid(){
    (...)
    btScrollDown.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            while(hasFocus)
                scrollDown();
        }
    });
    (...)
}

2 个答案:

答案 0 :(得分:1)

按下按钮后,您可以调用smoothScrollBysmoothScrollTo方法。但是,您必须根据您的要求计算滚动视图的数量。希望这可以帮助。

https://developer.android.com/reference/android/widget/ScrollView.html#smoothScrollBy(int,%20int)

答案 1 :(得分:1)

这是我的方法。

  • 按下按钮时启动计时器,并从按钮上取消触摸时取消计时器
  • 在定时器触发方法上,滚动某个值(y)。

微调计时器间隔和scrollBy值y以满足您的要求。