学习地址: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

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();
}
}
网友评论