如何获得用户滚动的百分比?

时间:2014-02-17 13:24:46

标签: android scrollview

我有一个滚动视图,其中包含文本,底部有一个按钮。我想要做的是根据用户滚动的百分比更改按钮上的文本。这是我的代码:

public class Verbal extends Activity implements ScrollViewListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.verbal);
    ObservableScrollView scrollview = (ObservableScrollView) findViewById(R.id.scrollview);
    scrollview.setScrollViewListener(this);

}

@Override
public void onScrollChanged(ObservableScrollView scrollView, int x, int y,
        int oldx, int oldy) {
    // TODO Auto-generated method stub
    Button answer = (Button) findViewById(R.id.answernumber);

    int totalHeight = scrollView.getChildAt(0).getHeight();
    int p = (y/totalHeight)*100;

    if (p>3 && p<8)
        answer.setText("1");
    else if (p>8 && p<11)
        answer.setText("2");
    else if (p>11 && p<14)
        answer.setText("3");
    else if (p>14 && p<17)
        answer.setText("4");
    else if (p>17 && p<21) 
        answer.setText("5");
    else if (p>21 && p<25)
        answer.setText("6");
    else if (p>25 && p<29)
        answer.setText("7");
    else if (p>29 && p<31)
        answer.setText("8");
    else if (p>31 && p<35)
        answer.setText("9");
    else if (p>35 && p<39)
        answer.setText("10");
    else if (p>39 && p<45)
        answer.setText("11");
    else if (p>45 && p<50)
        answer.setText("12");
    else if (p>50 && p<56)
        answer.setText("13");
    else if (p>56 && p<62)
        answer.setText("14");
    else if (p>62 && p<67)
        answer.setText("15");
    else if (p>67 && p<72)
        answer.setText("16");
    else if (p>72 && p<78)
        answer.setText("17");
    else if (p>78 && p<83)
        answer.setText("18");
    else if (p>83 && p<86)
        answer.setText("19");
    else if (p>86)
        answer.setText("20");   




}

}

问题是文本没有在按钮中改变,因为最初'y'的值为零,所以'p'也为零。但是当用户向下滚动'y'值时,'p'值会改变。我需要不断改变'p'的值作为'y'的变化。请以编程方式帮助我做什么?

1 个答案:

答案 0 :(得分:3)

我认为您的问题是您正在运行整数除法,因此p始终为0。 你必须把它变成这样的双倍:

 double p = ((double)y/(double)totalHeight)*100;