如何通过计时器显示元素?

时间:2015-01-11 15:27:25

标签: java android android-layout android-activity android-fragments

我有问题。我有一个ViewPager的Activity,它有一些片段。

在我的第一篇片段中,我有一些元素。让我们说一个ImageView,TextView。如何在完全打开ViewPager页面时通过计时器使它们可见?!

我在我的MainActivity.java文档中使用了下面的代码,使得ImageView可以通过计时器显示,但它的工作方式并不像我预期的那样。当我想通过滚动并触摸屏幕ImageView dissapear进入下一页。为什么会这样?!

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(新的OnPageChangeListener()时,我与pager.setCurrentItem(1)发生冲突;它显示了Activity首次打开时的具体页面。在我的情况下,它显示Activity首次打开时的2-d页面,但Tab显示打开1 -st page。为什么?!如何解决这个问题?!

1 个答案:

答案 0 :(得分: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) {

       }
   };