Android实现引导页

作者: 章北辰 | 来源:发表于2019-04-27 00:16 被阅读308次

    学习地址:https://www.imooc.com/video/15445
    Android实现引导页的方式:

    • 直接使用框架:AppIntro、guideshow、SlideingTutorial-Android
    • 自己实现:一个Splash、ViewPage(+fragment)、ViewFlipper、ScrollView(不常见)

    接下来将四中实现的方法记录一下。

    一个Splash

    除了主界面外,新建SplashActivity,并将SplashActivity设置为启动页,修改SplashActivity的代码,通过hander来显示splash的延时跳转(记得finish)。

    public class SplashActivity extends AppCompatActivity {
        private static final Long DELAY_TIME = 3000l;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_splash);
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    startActivity(new Intent(SplashActivity.this, MainActivity.class));
                    finish();
                }
            }, DELAY_TIME);
        }
    }
    
    ViewPage(+fragment)

    如图,上边是viewpager里的多个fragment,下边是LinearLayout布局,布局里放几个点。
    需要重写activity_view_pager布局,设置viewpager的适配器adapter,以及ViewPagerActivity


    viewpager.png
    activity_view_pager.xml
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></android.support.v4.view.ViewPager>
        <LinearLayout
            android:id="@+id/ll_indicator"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|bottom"
            android:layout_marginBottom="30dp"
            android:orientation="horizontal"></LinearLayout>
    </FrameLayout>
    

    #######ViewPagerActivity .java

    public class ViewPagerActivity extends FragmentActivity {
        ViewPager viewPager;
        private LinearLayout llIndicator;
        private PagerAdapter adapter;
        private List<Fragment> fragments = new ArrayList<>();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_view_pager);
            viewPager = findViewById(R.id.viewpager);
            llIndicator = findViewById(R.id.ll_indicator);
    
            //创建fragment
            for (int i = 0; i < 3; i++) {
                ContentFragment fragment = new ContentFragment();
                Bundle bundle = new Bundle();
                bundle.putInt("index", i);
                fragment.setArguments(bundle);
                fragments.add(fragment);
            }
            adapter = new ViewPagerAdapter(getSupportFragmentManager(), fragments);
            viewPager.setAdapter(adapter);
    
            //定义监听事件,当fragment发生变化时圆点进行切换
            viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int index, float v, int i1) {
                    for (int i = 0; i < fragments.size(); i++) {
                        llIndicator.getChildAt(i).setBackgroundResource(index == i ? R.drawable.dot_focus : R.drawable.dot_normal);
                    }
                }
                @Override
                public void onPageSelected(int i) {
                }
                public void onPageScrollStateChanged(int i) {
                }
            });
            initIndicator();
        }
    
        private void initIndicator() {//初始化圆点
            int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10f, getResources().getDisplayMetrics());
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(width, width);
            lp.rightMargin = 2 * width;
            for (int i = 0; i < fragments.size(); i++) {
                View view = new View(this);
                view.setId(i);
                view.setBackgroundResource(i == 0 ? R.drawable.dot_normal : R.drawable.dot_focus);
                view.setLayoutParams(lp);
                llIndicator.addView(view, i);
            }
        }
    }
    
    ContentFragment .java
    public class ContentFragment extends Fragment {
        private int[] bgRes = {R.drawable.table, R.drawable.table, R.drawable.table};
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_content, null);
            Button btn = view.findViewById(R.id.btn);
            RelativeLayout rl = view.findViewById(R.id.rl);
            int index = getArguments().getInt("index");//获取当前fragment所携带的index值,对应单签是第几个fragment
            rl.setBackgroundResource(bgRes[index]);//设置对应的背景图片
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(getActivity(), MainActivity.class));
                }
            });
            btn.setVisibility(index == 2 ? View.VISIBLE : View.GONE);//当界面为最后一个界面时才显示按钮
            return view;
        }
    }
    
    ViewPagerAdapter
    public class ViewPagerAdapter extends FragmentPagerAdapter {
        private List<Fragment> fragments = new ArrayList<>();
        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }
        public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
            super(fm);
            this.fragments = fragments;
        }
        @Override
        public Fragment getItem(int i) {
            return fragments.get(i);
        }
        @Override
        public int getCount() {
            return fragments.size();
        }
    }
    
    ViewFlipper
    ScrollView

    相关文章

      网友评论

        本文标题:Android实现引导页

        本文链接:https://www.haomeiwen.com/subject/zjacnqtx.html