ScrollView以编程方式从下到上滑动

时间:2012-01-22 12:26:21

标签: android scrollview

我希望在电影中产生类似“结束标题”的效果,其中参与者对项目的命名顺畅地从底部滑动到顶部。 我在考虑ScrollView,这是我的想法(显然它不起作用): 在onCreate:

sv = (ScrollView)findViewById(R.id.scroll_text);
onStart中的

@Override
public void onStart()
{
   super.onStart();
   sv.post(new Runnable() {

        @Override
        public void run() {
            sv.fullScroll(ScrollView.FOCUS_DOWN);
        }
    });

}

在onWindowsFocusChanged:

@Override
public void onWindowFocusChanged(boolean hasFocus) 
{
    if (hasFocus)
    {   

        int display_h = display.getHeight();
        pos_y = display_h; 
        mScrollHandler.removeCallbacks(mUpdateScroll);
        mScrollHandler.postDelayed(mUpdateScroll, 0);       

    }
    else
    {   

        mScrollHandler.removeCallbacks(mUpdateScroll);

    }
}

这适用于处理程序:

private Runnable mUpdateScroll = new Runnable() {
    public void run() {
        pos_y = pos_y - 1; 
        sv.scrollTo(0, pos_y);
        mScrollHandler.postDelayed(mUpdateScroll, 100);
    }
};

这里,登录pos_y变量可以正确地显示从480到0的变化。 我的想法是视图以10pixels /秒从下到上滚动。

不幸的是,scrollview中的布局在活动开始时完全显示。在scrollview中,我使用了经典的垂直linearLayout及其中的所有字符串,加载到onCreate中。

有人会帮助我吗?

1 个答案:

答案 0 :(得分:0)

好吧,目前我已决定使用其他方法,但如果有人有更好的建议,请加油。我删除了ScrollView布局,我只使用了经典的RelativeLayout和我需要循环的所有文本。

在OnCreate中:

display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
    int display_h = display.getHeight();
    pos_y = display_h; 

在onWindowsFocusChanged:

@Override
public void onWindowFocusChanged(boolean hasFocus) 
{
    if (hasFocus)
    {   

    RelativeLayout r_main = (RelativeLayout)findViewById(R.id.RelativeTables);          
      RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)r_main.getLayoutParams();          
      params.leftMargin = 0;
      params.topMargin = pos_y;
      r_main.setLayoutParams(params);
mScrollHandler.removeCallbacks(mUpdateScroll);
            mScrollHandler.postDelayed(mUpdateScroll, 0);       

}
else
{   

    mScrollHandler.removeCallbacks(mUpdateScroll);

}

}

最后在runnable中:

private Runnable mUpdateScroll = new Runnable() {
public void run() {
    pos_y = pos_y - 1; 
    RelativeLayout r_main = (RelativeLayout)findViewById(R.id.RelativeTables);          
          RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)r_main.getLayoutParams();          
          params.leftMargin = 0;
          params.topMargin = pos_y;
          r_main.setLayoutParams(params);
    mScrollHandler.postDelayed(mUpdateScroll, 100);

// the running cycle:
if (pos_y<-display.getHeight()) {
                    pos_y = display.getHeight();
                }

    }
};

有效。