我希望在电影中产生类似“结束标题”的效果,其中参与者对项目的命名顺畅地从底部滑动到顶部。 我在考虑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中。
有人会帮助我吗?
答案 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();
}
}
};
有效。