如何通过计时器显示元素?
How to show element by timer?
我有问题。我有一个带有 ViewPager 的 Activity,其中有一些片段。
在我的第一个片段中,我有一些元素。让我们说一个ImageView,TextView。如何在完全打开ViewPager页面的情况下通过定时器让它们可见?!
我在我的 MainActivity.java 文档中使用了下面的这段代码,使计时器可以看到该 ImageView,但它的工作方式不如我预期。当我想通过滚动转到下一页并触摸屏幕时,ImageView 消失了。为什么会这样?!
final ImageView mImageView = (ImageView) findViewById(R.id.earth);
mImageView.setVisibility(View.INVISIBLE);
mImageView.postDelayed(new Runnable() {
public void run() {
mImageView.setVisibility(View.VISIBLE);
}}, 5000);
感谢任何帮助。谢谢!
我的新编辑:
// Initialize the ViewPager and set an adapter
ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
// Bind the tabs to the ViewPager
PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
tabs.setViewPager(pager);
//open concrete page of ViewPager. setCurrentItem(index of page)
pager.setCurrentItem(1);
tabs.setOnPageChangeListener(new OnPageChangeListener() {
//This method will be invoked when the current page is scrolled, either as part of a program initiated smooth scroll or a user initiated touch scroll.
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//This method will be invoked when a new page becomes selected.
@Override
public void onPageSelected(int position) {
final ImageView mImageView = (ImageView) findViewById(R.id.earth);
mImageView.setVisibility(View.INVISIBLE);
if (position == 0) {
mImageView.postDelayed(new Runnable() {
public void run() {
mImageView.setVisibility(View.VISIBLE);
}
}, 5000);
}
}
//Called when the scroll state changes.
@Override
public void onPageScrollStateChanged(int state) {
}
});
我的问题是与 TABS 和 ViewPager 冲突。当我使用 tabs.setOnPageChangeListener(new OnPageChangeListener() 我与 pager.setCurrentItem(1) 有冲突;它在 Activity 首次打开时显示具体页面。在我的例子中,当 Activity 第一次打开但是 Tab 显示打开了第 1 页。为什么?!如何解决这个问题?!
我不会使用计时器。它要么开得太早,要么太晚,在此期间你的 UI 看起来很糟糕。使用寻呼机的事件来了解何时更新您的 UI。例如,您可以使用 OnPageChangedListener
:
pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// Now displaying page at position
}
@Override
public void onPageScrollStateChanged(int state) {
}
};
我有问题。我有一个带有 ViewPager 的 Activity,其中有一些片段。
在我的第一个片段中,我有一些元素。让我们说一个ImageView,TextView。如何在完全打开ViewPager页面的情况下通过定时器让它们可见?!
我在我的 MainActivity.java 文档中使用了下面的这段代码,使计时器可以看到该 ImageView,但它的工作方式不如我预期。当我想通过滚动转到下一页并触摸屏幕时,ImageView 消失了。为什么会这样?!
final ImageView mImageView = (ImageView) findViewById(R.id.earth);
mImageView.setVisibility(View.INVISIBLE);
mImageView.postDelayed(new Runnable() {
public void run() {
mImageView.setVisibility(View.VISIBLE);
}}, 5000);
感谢任何帮助。谢谢!
我的新编辑:
// Initialize the ViewPager and set an adapter
ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
// Bind the tabs to the ViewPager
PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
tabs.setViewPager(pager);
//open concrete page of ViewPager. setCurrentItem(index of page)
pager.setCurrentItem(1);
tabs.setOnPageChangeListener(new OnPageChangeListener() {
//This method will be invoked when the current page is scrolled, either as part of a program initiated smooth scroll or a user initiated touch scroll.
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//This method will be invoked when a new page becomes selected.
@Override
public void onPageSelected(int position) {
final ImageView mImageView = (ImageView) findViewById(R.id.earth);
mImageView.setVisibility(View.INVISIBLE);
if (position == 0) {
mImageView.postDelayed(new Runnable() {
public void run() {
mImageView.setVisibility(View.VISIBLE);
}
}, 5000);
}
}
//Called when the scroll state changes.
@Override
public void onPageScrollStateChanged(int state) {
}
});
我的问题是与 TABS 和 ViewPager 冲突。当我使用 tabs.setOnPageChangeListener(new OnPageChangeListener() 我与 pager.setCurrentItem(1) 有冲突;它在 Activity 首次打开时显示具体页面。在我的例子中,当 Activity 第一次打开但是 Tab 显示打开了第 1 页。为什么?!如何解决这个问题?!
我不会使用计时器。它要么开得太早,要么太晚,在此期间你的 UI 看起来很糟糕。使用寻呼机的事件来了解何时更新您的 UI。例如,您可以使用 OnPageChangedListener
:
pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// Now displaying page at position
}
@Override
public void onPageScrollStateChanged(int state) {
}
};