android ViewPager滑动欢迎界面

北战南征 提交于 2019-12-27 22:08:15

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

    我们看到很多应用安装后第一次打开时会出现一页一页滑动的欢迎界面,如下所示,下面就来看看实现过程
    
  
    
    1、布局
    
    看到这样的应用我们很容易想到它的所用组件和布局方式,就来看布局方式
    
   
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/white" >
    </android.support.v4.view.ViewPager>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:id="@+id/viewGroup"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="50.0dp"
            android:gravity="center"
            android:orientation="horizontal" >
        </LinearLayout>
    </RelativeLayout>

</FrameLayout>


    2、组件
    
    这里主要是ViewPager组件和一些事件,关于组件ViewPager已经在我博客的前面文章已经说过 http://my.oschina.net/helu/blog/141719,下面主要来看OnPageChangeListener事件
    
    看名字可以知道“页面改变事件”,则肯定是类似ViewPager等组件的事件,它有三个必须实现的方法
    
   
class ViewPagerPageChangeListener implements OnPageChangeListener {

        /*
         * state:网上通常说法:1的时候表示正在滑动,2的时候表示滑动完毕了,0的时候表示什么都没做,就是停在那;
         * 我的认为:1是按下时,0是松开,2则是新的标签页的是否滑动了
         * (例如:当前页是第一页,如果你向右滑不会打印出2,如果向左滑直到看到了第二页,那么就会打印出2了);
         * 个人认为一般情况下是不会重写这个方法的
         */
        @Override
        public void onPageScrollStateChanged(int state) {
        }

        /*
         * page:看名称就看得出,当前页; positionOffset:位置偏移量,范围[0,1];
         * positionoffsetPixels:位置像素,范围[0,屏幕宽度); 个人认为一般情况下是不会重写这个方法的
         */
        @Override
        public void onPageScrolled(int page, float positionOffset,
                int positionOffsetPixels) {
        }

        @Override
        public void onPageSelected(int page) {
            //更新图标
            for (int i = 0; i < list.size(); i++) {
                if (page == i) {
                    img[i].setBackgroundResource(R.drawable.page_indicator_focused);
                } else {
                    img[i].setBackgroundResource(R.drawable.page_indicator);
                }
            }
        }
    }

    
    3、主界面代码
  
public class MainActivity extends Activity {

    private static final String TAG = "test";
    private ViewPager viewpager = null;
    private List<View> list = null;
    private ImageView[] img = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        viewpager = (ViewPager) findViewById(R.id.viewpager);
        list = new ArrayList<View>();
        list.add(getLayoutInflater().inflate(R.layout.tab1, null));
        list.add(getLayoutInflater().inflate(R.layout.tab2, null));
        list.add(getLayoutInflater().inflate(R.layout.tab3, null));

        img = new ImageView[list.size()];
        LinearLayout layout = (LinearLayout) findViewById(R.id.viewGroup);
        for (int i = 0; i < list.size(); i++) {
            img[i] = new ImageView(MainActivity.this);
            if (0 == i) {
                img[i].setBackgroundResource(R.drawable.page_indicator_focused);
            } else {
                img[i].setBackgroundResource(R.drawable.page_indicator);
            }
            img[i].setPadding(0, 0, 20, 0);
            layout.addView(img[i]);
        }
        viewpager.setAdapter(new ViewPagerAdapter(list));
        viewpager.setOnPageChangeListener(new ViewPagerPageChangeListener());
    }

    class ViewPagerAdapter extends PagerAdapter {

        private List<View> list = null;

        public ViewPagerAdapter(List<View> list) {
            this.list = list;
        }

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            container.addView(list.get(position));
            return list.get(position);
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(list.get(position));
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == arg1;
        }

    }
    }

    我的博客其它文章列表
    http://my.oschina.net/helu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!