App引导页面代码示例

public class GuideUI extends Activity implements OnClickListener
{
	public static final String	TAG		= "GuideUI";

	private int[]				IMAGES	= new int[] {
										R.drawable.guide_1,
										R.drawable.guide_2,
										R.drawable.guide_3
										};

	private ViewPager			mViewPager;
	private LinearLayout		mPonintContainer;		// 装静态点的容器
	private ImageView			mIvPointFocus;			// 动态的点
	private Button				mBtnStart;

	private List<ImageView>		mImageDatas;			// ViewPager对应的数据

	private int					mPointSpace;			// 两个点的距离

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		// 去掉标题
		requestWindowFeature(Window.FEATURE_NO_TITLE);

		super.onCreate(savedInstanceState);
		setContentView(R.layout.ui_guide);// 加载xml布局--->异步加载

		// 初始化view
		initView();

		// 初始化数据
		initData();
	}

	private void initView()
	{
		mViewPager = (ViewPager) findViewById(R.id.guide_viewpager);
		mPonintContainer = (LinearLayout) findViewById(R.id.guide_point_container);
		mIvPointFocus = (ImageView) findViewById(R.id.guide_iv_pointfocus);
		mBtnStart = (Button) findViewById(R.id.guide_btn_start);

		mIvPointFocus.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

			@Override
			public void onGlobalLayout()
			{
				// 布局发生改变时的回调
				mPointSpace = mPonintContainer.getChildAt(1).getLeft() - mPonintContainer.getChildAt(0).getLeft();

				mIvPointFocus.getViewTreeObserver().removeGlobalOnLayoutListener(this);
			}
		});

		// 设置button点击事件
		mBtnStart.setOnClickListener(this);
	}

	private void initData()
	{
		// 初始化数据
		mImageDatas = new ArrayList<ImageView>();
		for (int i = 0; i < IMAGES.length; i++)
		{
			ImageView iv = new ImageView(this);
			// 设置显示
			iv.setImageResource(IMAGES[i]);
			iv.setScaleType(ScaleType.FIT_XY);

			mImageDatas.add(iv);

			ImageView point = new ImageView(this);
			point.setImageResource(R.drawable.point_normal);

			LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
																				LayoutParams.WRAP_CONTENT);
			if (i != 0)
			{
				params.leftMargin = 10;
			}
			// 动态加载点
			mPonintContainer.addView(point, params);
		}

		// 设置adapter
		mViewPager.setAdapter(new GuideAdapter());// apdater ---> List

		// 给viewpager设置监听
		mViewPager.setOnPageChangeListener(new GuidePagerListener());
	}

	private class GuideAdapter extends PagerAdapter
	{

		@Override
		public int getCount()
		{
			if (mImageDatas != null) { return mImageDatas.size(); }
			return 0;
		}

		@Override
		public boolean isViewFromObject(View view, Object object)
		{
			return view == object;
		}

		@Override
		public Object instantiateItem(ViewGroup container, int position)
		{
			// 初始化view
			ImageView iv = mImageDatas.get(position);

			// 添加到container
			container.addView(iv);

			return iv;
		}

		@Override
		public void destroyItem(ViewGroup container, int position, Object object)
		{
			container.removeView((View) object);
		}
	}

	private class GuidePagerListener implements OnPageChangeListener
	{

		@Override
		public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
		{
			// 1.position: 在那个页面滑动
			// 2.positionOffset: 滑动的像素值/页面的宽度 滑动的百分比
			// 3.positionOffsetPixels: 滑动的像素值
			// 当页面滚动时的回调
			// Log.d(TAG, "onPageScrolled : " + position + "  " + positionOffset
			// + "  " + positionOffsetPixels);

			// 两个点间的距离--->
			// 两个点间的距离 * 滑动的比值positionOffset
			int marginLeft = (int) (mPointSpace * positionOffset + position * mPointSpace + 0.5f);

			// 动态去设置 点的marginLeft
			RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) mIvPointFocus.getLayoutParams();
			params.leftMargin = marginLeft;
			mIvPointFocus.setLayoutParams(params);
		}

		@Override
		public void onPageSelected(int position)
		{
			// 当页面选中时的回调
			// Log.d(TAG, "onPageSelected:" + position);

			// if (position == mImageDatas.size() - 1)
			// {
			// mBtnStart.setVisibility(View.VISIBLE);
			// }
			// else
			// {
			// mBtnStart.setVisibility(View.GONE);
			// }
			mBtnStart.setVisibility((position == mImageDatas.size() - 1) ? View.VISIBLE : View.GONE);
		}

		@Override
		public void onPageScrollStateChanged(int state)
		{
			// 页面滑动状态改变时的回调
			// * @param state The new scroll state.
			// * @see ViewPager#SCROLL_STATE_IDLE : 闲置
			// * @see ViewPager#SCROLL_STATE_DRAGGING : 拖拽状态
			// * @see ViewPager#SCROLL_STATE_SETTLING: 固定选中状态

			// 由一种状态变为另外一种状态
			Log.d(TAG, "onPageScrollStateChanged:" + state);

		}

	}

	@Override
	public void onClick(View v)
	{
		if (v == mBtnStart)
		{
			// 记录已经打开过
			PreferenceUtils.setBoolean(this, WelcomeUI.KEY_FIRST_LOAD, false);

			// 页面跳转
			Intent intent = new Intent(this, HomeUI.class);
			startActivity(intent);
			finish();

		}
	}
}

你可能感兴趣的:(App引导页面代码示例)