2012-01-22 5 views
0

私は、プロジェクトの参加者の名前が下から上にスムーズにスライドする映画の「終了タイトル」のような効果を得たいと思います。 (明らかにそれは動作しません)私はScrollViewを考えていた、これは私の考えです:のonCreateで :ONSTARTでScrollViewはプログラム上から下にスライドします

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

:onWindowsFocusChangedで

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

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

} 

@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変数のLogは、480から0への変化をスムーズに正確に示します。 私の考えは、ビューが10ピクセル/秒で下から上にスクロールするということでした。

残念ながら、スクロールビュー内のレイアウトは、アクティビティの開始時に完全に表示されます。スクロールビューでは、その中のすべての文字列を使って、verticalLayoutを使って、onCreateにロードしました。

誰かが私を助けますか?

答えて

0

私はこの他のアプローチを使用することに決めた瞬間、だれでもより良い提案があれば、どうぞ。私はScrollViewレイアウトを削除しました。私はサイクルに必要なすべてのテキストを使って、クラシックRelativeLayoutを使用しました。 OnCreate関数で

:onWindowsFocusChangedで

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

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

    } 
}; 

それは動作します。

関連する問題