splash 启动界面

在启动activity的时候,首先通过sharedPreference来保存是否第一次安装该程序,如果是,那么就跳转到引导界面,否则就直接进入spash界面

public class MainActivity extends Activity {
 SharedPreferences preferences;
 public static int SPLASH_DISPLAY_LENGHT = 2000;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  firststartActivity();
 }

 @SuppressWarnings("deprecation")
 public void firststartActivity() {
  preferences = getSharedPreferences("count", MODE_WORLD_READABLE);

  int count = preferences.getInt("count", 0);

  // 判断程序与第几次运行,如果是第一次运行则跳转到引导页面

  if (count == 0) {

   Editor editor = preferences.edit();
   // 存入数据
   editor.putInt("count", ++count);
   // 提交修改
   editor.commit();

   Intent intent = new Intent();

   intent.setClass(getApplicationContext(), FirstActivity.class);

   startActivity(intent);

   finish();

  } else {
   new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {

     Intent mainIntent = new Intent(MainActivity.this,
       ContentActivity.class);

     MainActivity.this.startActivity(mainIntent);

     overridePendingTransition(R.anim.fade, R.anim.hold);

     MainActivity.this.finish();

    }

   }, SPLASH_DISPLAY_LENGHT);
  }
 }

 


 

//下面是引导界面的实现

1.//定义一个监听接口

package com.keywaysoft.start;

public interface OnViewChangeListener {
 public void OnViewChange(int view);
}

 

2.//首先自定义一个ViewGroup类,通过滑动手势,实现ViewFilper效果

package com.keywaysoft.start;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Scroller;

public class MyScrollLayout extends ViewGroup {

 private static final String TAG = "ScrollLayout";

 private VelocityTracker mVelocityTracker; // 用于判断甩动手势

 private static final int SNAP_VELOCITY = 600;

 private Scroller mScroller; // 滑动控制

 private int mCurScreen;

 private int mDefaultScreen = 0;

 private float mLastMotionX;

 private OnViewChangeListener mOnViewChangeListener;

 public MyScrollLayout(Context context) {
  super(context);
  init(context);
 }

 public MyScrollLayout(Context context, AttributeSet attrs) {
  super(context, attrs);
  init(context);
 }

 public MyScrollLayout(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);

  init(context);
 }

 private void init(Context context) {
  mCurScreen = mDefaultScreen;
  mScroller = new Scroller(context);

 }

 @Override
 protected void onLayout(boolean changed, int l, int t, int r, int b) {

  if (changed) {
   int childLeft = 0;
   final int childCount = getChildCount();

   for (int i = 0; i < childCount; i++) {
    final View childView = getChildAt(i);
    if (childView.getVisibility() != View.GONE) {
     final int childWidth = childView.getMeasuredWidth();
     childView.layout(childLeft, 0, childLeft + childWidth,
       childView.getMeasuredHeight());
     childLeft += childWidth;
    }
   }
  }
 }

 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  super.onMeasure(widthMeasureSpec, heightMeasureSpec);

  final int width = MeasureSpec.getSize(widthMeasureSpec);
//  final int widthMode = MeasureSpec.getMode(widthMeasureSpec);

  final int count = getChildCount();
  for (int i = 0; i < count; i++) {
   getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
  }

  scrollTo(mCurScreen * width, 0);

 }

 public void snapToDestination() {
  final int screenWidth = getWidth();

  final int destScreen = (getScrollX() + screenWidth / 2) / screenWidth;
  snapToScreen(destScreen);
 }

 public void snapToScreen(int whichScreen) {

  whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1));
  if (getScrollX() != (whichScreen * getWidth())) {

   final int delta = whichScreen * getWidth() - getScrollX();

   mScroller.startScroll(getScrollX(), 0, delta, 0,
     Math.abs(delta) * 2);

   mCurScreen = whichScreen;
   invalidate(); // Redraw the layout

   if (mOnViewChangeListener != null) {
    mOnViewChangeListener.OnViewChange(mCurScreen);
   }
  }
 }

 @Override
 public void computeScroll() {
  if (mScroller.computeScrollOffset()) {
   scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
   postInvalidate();
  }
 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {

  final int action = event.getAction();
  final float x = event.getX();
//  final float y = event.getY();

  switch (action) {
  case MotionEvent.ACTION_DOWN:

   Log.i("", "onTouchEvent  ACTION_DOWN");

   if (mVelocityTracker == null) {
    mVelocityTracker = VelocityTracker.obtain();
    mVelocityTracker.addMovement(event);
   }

   if (!mScroller.isFinished()) {
    mScroller.abortAnimation();
   }

   mLastMotionX = x;
   break;

  case MotionEvent.ACTION_MOVE:
   int deltaX = (int) (mLastMotionX - x);

   if (IsCanMove(deltaX)) {
    if (mVelocityTracker != null) {
     mVelocityTracker.addMovement(event);
    }

    mLastMotionX = x;

    scrollBy(deltaX, 0);
   }

   break;

  case MotionEvent.ACTION_UP:

   int velocityX = 0;
   if (mVelocityTracker != null) {
    mVelocityTracker.addMovement(event);
    mVelocityTracker.computeCurrentVelocity(1000);
    velocityX = (int) mVelocityTracker.getXVelocity();
   }

   if (velocityX > SNAP_VELOCITY && mCurScreen > 0) {
    Log.e(TAG, "snap left");
    snapToScreen(mCurScreen - 1);
   } else if (velocityX < -SNAP_VELOCITY
     && mCurScreen < getChildCount() - 1) {
    Log.e(TAG, "snap right");
    snapToScreen(mCurScreen + 1);
   } else {
    snapToDestination();
   }

   if (mVelocityTracker != null) {
    mVelocityTracker.recycle();
    mVelocityTracker = null;
   }

   break;
  }

  return true;
 }

 private boolean IsCanMove(int deltaX) {

  if (getScrollX() <= 0 && deltaX < 0) {
   return false;
  }

  if (getScrollX() >= (getChildCount() - 1) * getWidth() && deltaX > 0) {
   return false;
  }

  return true;
 }

 public void SetOnViewChangeListener(OnViewChangeListener listener) {
  mOnViewChangeListener = listener;
 }

}

3.//在xml文件中使用刚刚自定义的View

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainRLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#000000" >

    <com.keywaysoft.start.MyScrollLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/ScrollLayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="visible" >

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/img_intro_0" >
        </RelativeLayout>

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/img_intro_1" >

            <Button
                android:id="@+id/startBtn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_gravity="center_vertical"
                android:layout_marginBottom="160dp"
                android:layout_marginLeft="8dp"
                android:layout_marginRight="8dp"
                android:background="@drawable/logo"
                android:text="开始历程"
                android:textColor="#FFFFFF"
                android:textSize="18sp" />
        </RelativeLayout>
    </com.keywaysoft.start.MyScrollLayout>

</RelativeLayout>

4.//最终通过点击按钮跳转到相关的界面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值