文章标题

/**
* 新手引导页
*/
public class GuideActivity extends Activity {

private ViewPager mViewPager;
private LinearLayout llContainer;
private ImageView ivRedPoint;
private Button btnStart;

//图片id集合
private int[] mImageIds = new int[] { R.drawable.guide_1,
        R.drawable.guide_2, R.drawable.guide_3 };

private ArrayList<ImageView> mImageViews;

private int mPointDis;//圆点移动距离

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);//从代码中去掉标题栏的方法, 必须在setContentView之前调用
    setContentView(R.layout.activity_guide);
    initViews();
    initData();
}

//初始化布局
private void initViews() {
    mViewPager = (ViewPager) findViewById(R.id.vp_guide);
    llContainer = (LinearLayout) findViewById(R.id.ll_container);
    ivRedPoint = (ImageView) findViewById(R.id.iv_red_point);
    btnStart = (Button) findViewById(R.id.btn_start);
}

//初始化数据
private void initData() {
    //初始化三张图片的ImageView
    mImageViews = new ArrayList<ImageView>();
    for (int i = 0; i < mImageIds.length; i++) {
        ImageView view = new ImageView(this);
        view.setBackgroundResource(mImageIds[i]);
        mImageViews.add(view);

        //初始化小圆点
        ImageView point = new ImageView(this);
        point.setImageResource(R.drawable.shape_point_normal);

        //初始化布局参数
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        if (i > 0) {
            params.leftMargin = 10;//从第二个点开始设置左边距10px
        }

        point.setLayoutParams(params);//设置布局参数

        llContainer.addView(point);
    }

    mViewPager.setAdapter(new GuideAdapter());

    //监听ViewPager滑动事件,更新小红点位置
    mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            if (position == mImageIds.length - 1) {
                //最后一个页面显示开始体验按钮
                btnStart.setVisibility(View.VISIBLE);
            } else {
                btnStart.setVisibility(View.GONE);
            }
        }

        //监听滑动事件
        @Override
        public void onPageScrolled(int position, float positionOffset,
                int positionOffsetPixels) {
            System.out.println("当前位置:" + position + ";偏移百分比:"
                    + positionOffset);

            //通过修改小红点的左边距来更新小红点的位置
            int leftMargin = (int) (mPointDis * positionOffset + position
                    * mPointDis + 0.5f);//要将当前的位置信息产生的距离加进来
            //获取小红点的布局参数
            RelativeLayout.LayoutParams params = (LayoutParams) ivRedPoint
                    .getLayoutParams();
            params.leftMargin = leftMargin;
            ivRedPoint.setLayoutParams(params);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

    //计算圆点移动距离 = 第二个圆点的左边距-第一个圆点左边距
    //      mPointDis = llContainer.getChildAt(1).getLeft()
    //              - llContainer.getChildAt(0).getLeft();
    //      System.out.println("mPointDis:" + mPointDis);
    //      System.out.println("mPointDis1:" + llContainer.getChildAt(1).getLeft());
    //      System.out.println("mPointDis2:" + llContainer.getChildAt(0).getLeft());
    //measure->layout->draw, 必须onCreate执行结束之后,才会开始绘制布局,走此三个方法

    //监听layout执行结束的事件, 一旦结束之后, 在去获取当前的left位置
    //视图树
    ivRedPoint.getViewTreeObserver().addOnGlobalLayoutListener(
            new OnGlobalLayoutListener() {

                //一旦视图树的layout方法调用完成, 就会回调此方法
                @Override
                public void onGlobalLayout() {
                    //布局位置已经确定,可以拿到位置信息了
                    mPointDis = llContainer.getChildAt(1).getLeft()
                            - llContainer.getChildAt(0).getLeft();
                    System.out.println("mPointDis:" + mPointDis);

                    //移除观察者
                    //ivRedPoint.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                    ivRedPoint.getViewTreeObserver()
                            .removeGlobalOnLayoutListener(this);
                }
            });

    //开始体验按钮点击
    btnStart.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //在sp中记录访问过引导页的状态
            PrefUtils.putBoolean(getApplicationContext(), "is_guide_show",
                    true);

            //跳到主页面
            startActivity(new Intent(getApplicationContext(),
                    MainActivity.class));
            finish();
        }
    });
}

@Override
protected void onStart() {
    super.onStart();
}

@Override
protected void onResume() {
    super.onResume();
}

class GuideAdapter extends PagerAdapter {

    @Override
    public int getCount() {
        return mImageIds.length;
    }

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

    //初始化布局
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        //ImageView view = new ImageView(getApplicationContext());
        ImageView view = mImageViews.get(position);

        container.addView(view);

        return view;
    }

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

}

}
//布局

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值