现在几乎每个Android应用都有启动页面,那么怎样实现一个启动页面,下面是我的启动页面的实现, 希望对你有帮助!
需求:Android引导页面,一般由三四张图片,简单介绍项目的特点和功能。在最后一张显示进入按钮,点击进入到下一个页面,引导页面只会在第一次启动的时候显示, 之后启动应用从启动页面进入。
下面简单说一下我的实现:
xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/launcher_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/img_launcher"
android:scaleType="fitXY"
android:visibility="gone" />
<RelativeLayout
android:id="@+id/splash_layout_guide"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/splash_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:id="@+id/splash_view_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:gravity="center"
android:orientation="horizontal">
</LinearLayout>
<Button
android:id="@+id/btnInto"
android:layout_width="150dp"
android:layout_height="42dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="42dp"
android:background="@drawable/effct_btn_into"
android:text="进入"
android:textColor="#FFFFFF"
android:textSize="16sp"
android:visibility="gone" />
</RelativeLayout>
</RelativeLayout>
以上是启动引导页面的布局代码,根布局是一个RelativeLayout,是因为我将启动页面和引导页面放在了一起,首先放了一个ImageView 用于展示启动页面,默认是隐藏的,只有不是第一次启动才会显示。之后是一个RelativeLayout,该布局里面的ViewPager是用来加载引导页面的组件,第二个是LinearLayout 是引导页面的指示器容器,第三个是一个Button,设置参数,可以放在任何位置, 默认是隐藏的, 只有滑动到最后一个页面的时候才会显示。
此代码是设置全屏
//判断是否为第一次启动
private void initData() {
boolean isFirst = SharedPreferencesUtil.getBoolean(this, AppConfig.IS_FIRST_LAUNCHER, true);
if (isFirst) {
launcherGuide();
} else {
launcherSplash();
}
}
启动的时候先判断是否为第一次启动,如果是第一次启动, 进入引到页面,否则进入启动页面。
/×*
* 引导页面
*/
private void launcherGuide() {
launcherImg.setVisibility(View.GONE);
splashLayoutGuide.setVisibility(View.VISIBLE);
initIndicator();
Animation animation = AnimationUtils.loadAnimation(this, R.anim.fadein);
btnInto.setAnimation(animation);
adapter = new GuidePagerAdapter();
splashViewPager.setAdapter(adapter);
splashViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageSelected(int position) {
if (position == images.length - 1) {
btnInto.setVisibility(View.VISIBLE);
} else {
btnInto.setVisibility(View.GONE);
}
setCurrentDot(position);
}
@Override
public void onPageScrollStateChanged(int state) {}
});
}
d以上是引到页面的代码,根布局设置为显示,启动页面的控件隐藏,初始化指示器。对ViewPager 绑定数据,并且注册addOnPageChangeListener监听。重写onPageSelected方法,当position在最后一个的时候,显示进入按钮。
初始化指示器代码如下:
/**
* 初始化指示器
*/
private void initIndicator() {
for (int i = 0; i < images.length; i++) {
ImageView img = new ImageView(SplashActivity.this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20, 20);
params.setMargins(10, 0, 10, 0);
img.setLayoutParams(params);
if (i == 0) {
img.setImageDrawable(getResources().
getDrawable(R.drawable.indicator_sel));
} else {
img.setImageDrawable(getResources().getDrawable(R.drawable.indicator_nor));
}
splashViewGroup.addView(img);
}
}
根据页面的数量 动态添加指示器圆点。并且将第一个设置为当前选中状态。
/**
* 启动页面
*/
private void launcherSplash() {
splashLayoutGuide.setVisibility(View.GONE);
launcherImg.setVisibility(View.VISIBLE);
Animation animation = AnimationUtils.loadAnimation(this, R.anim.fadein);
launcherImg.startAnimation(animation);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}, 1000);
}
启动页面通过定时器延迟一秒跳转到MainActivity.
Android启动页面的核心功能就是如此。
下载源码:SplashActivityDemo