引導頁是幾乎所有App都會使用的,這不是什麼很難實作的功能,在這裡做記錄是友善以後使用,不用在去寫而是直接可以拿來使用
public class CarouselActivity extends BaseActivity implements OnClickListener, OnPageChangeListener {
private ViewPager vp;
private ViewPagerAdapter vpAdapter;
private List<View> views;
private Button button;
private static final int[] pics = {R.mipmap.carousel1,
R.mipmap.carousel2, R.mipmap.carousel3,
R.mipmap.carousel4};
private ImageView[] dots;
private int currentIndex;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_carousel);
StatusBarUtil.setTransparentForWindow(this);
//解決華為虛拟鍵問題
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
checkDeviceHasNavigationBar(getApplicationContext());
//判斷是否有虛拟鍵
if (checkDeviceHasNavigationBar(getApplicationContext())) {
solveNavigationBar(getWindow());
}
button = (Button) findViewById(R.id.button);
views = new ArrayList<View>();
LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
for (int i = 0; i < pics.length; i++) {
ImageView iv = new ImageView(this);
iv.setLayoutParams(mParams);
iv.setImageResource(pics[i]);
views.add(iv);
}
vp = (ViewPager) findViewById(R.id.viewpager);
vpAdapter = new ViewPagerAdapter(views);
vp.setAdapter(vpAdapter);
vp.setOnPageChangeListener(this);
// button = (Button) findViewById(R.id.button);
initDots();
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
CarouselActivity.this.finish();
Intent intent = new Intent();
intent.setClass(CarouselActivity.this, MainActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以關掉所要到的界面中間的activity
startActivity(intent);
}
});
}
/**
* <P>shang</P>
* <P>判斷是否有虛拟按鍵</P>
*
* @param context
* @return
*/
public boolean checkDeviceHasNavigationBar(Context context) {
boolean hasNavigationBar = false;
Resources rs = context.getResources();
int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");
if (id > 0) {
hasNavigationBar = rs.getBoolean(id);
}
try {
Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
Method m = systemPropertiesClass.getMethod("get", String.class);
String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");
if ("1".equals(navBarOverride)) {
hasNavigationBar = false;
} else if ("0".equals(navBarOverride)) {
hasNavigationBar = true;
}
} catch (Exception e) {
}
return hasNavigationBar;
}
/**
* <P>shang</P>
* <P>解決虛拟按鍵問題</P>
*
* @param window
*/
public void solveNavigationBar(Window window) {
//保持布局狀态
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
//布局位于狀态欄下方
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
//全屏
View.SYSTEM_UI_FLAG_FULLSCREEN |
//隐藏導航欄
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
if (Build.VERSION.SDK_INT >= 19) {
uiOptions |= 0x00001000;
} else {
uiOptions |= View.SYSTEM_UI_FLAG_LOW_PROFILE;
}
window.getDecorView().setSystemUiVisibility(uiOptions);
}
private void initDots() {
LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
dots = new ImageView[pics.length];
for (int i = 0; i < pics.length; i++) {
dots[i] = (ImageView) ll.getChildAt(i);
dots[i].setEnabled(true);
dots[i].setOnClickListener(this);
dots[i].setTag(i);
}
currentIndex = 0;
dots[currentIndex].setEnabled(false);
}
private void setCurView(int position) {
if (position < 0 || position >= pics.length) {
return;
}
vp.setCurrentItem(position);
}
private void setCurDot(int positon) {
if (positon < 0 || positon > pics.length - 1 || currentIndex == positon) {
return;
}
dots[positon].setEnabled(false);
dots[currentIndex].setEnabled(true);
currentIndex = positon;
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int arg0) {
setCurDot(arg0);
if (arg0 == 3) {
button.setVisibility(View.VISIBLE);
} else {
button.setVisibility(View.GONE);
}
}
@Override
public void onClick(View v) {
int position = (Integer) v.getTag();
setCurView(position);
setCurDot(position);
}
class ViewPagerAdapter extends PagerAdapter {
private List<View> views;
public ViewPagerAdapter(List<View> views) {
this.views = views;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView(views.get(arg1));
}
@Override
public void finishUpdate(View arg0) {
// TODO Auto-generated method stub
}
@Override
public int getCount() {
if (views != null) {
return views.size();
}
return 0;
}
@Override
public Object instantiateItem(View arg0, int arg1) {
((ViewPager) arg0).addView(views.get(arg1), 0);
return views.get(arg1);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return (arg0 == arg1);
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
// TODO Auto-generated method stub
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}
@Override
public void startUpdate(View arg0) {
// TODO Auto-generated method stub
}
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:scaleType="center"
android:id="@+id/viewpager"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<LinearLayout
android:visibility="gone"
android:id="@+id/ll"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24.0dip"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="15.0dip"
android:src="@drawable/dot" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="15.0dip"
android:src="@drawable/dot" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="15.0dip"
android:src="@drawable/dot" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="15.0dip"
android:src="@drawable/dot" />
</LinearLayout>
<Button
android:background="@null"
android:id="@+id/button"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_above="@id/ll"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="20dp"
/>
</RelativeLayout>
歡迎頁做判斷
if (preferences.getBoolean("firststart", true)) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
editor = preferences.edit();
//将登入标志位設定為false,下次登入時不在顯示首次登入界面
editor.putBoolean("firststart", false);
editor.commit();
Intent intent=new Intent();
intent.setClass(WelcomeActivity.this,CarouselActivity.class);
startActivity(intent);
finish();
}
},2000);
}
代碼基本就是這些,有些地方需要自己補充