2012-01-22 32 views
0

我想在電影中看到類似「結尾標題」的效果,其中參與者對項目的名稱順利地從底部滑到頂部。在調用onStartScrollView從下到上滑動,以編程方式

sv = (ScrollView)findViewById(R.id.scroll_text); 

: 我在想滾動型,這是我的想法(顯然它不工作): 在OnCreate

@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中,我使用了一個經典的verticalLayout,其中包含所有字符串,並在onCreate中加載。

有人會幫我嗎?

回答

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); 

} 

}

終於在可運行:

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(); 
       } 

    } 
}; 

它的工作原理。

相關問題