package com.atguigu.beijingnews.activity; import android.content.Intent; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import com.atguigu.baselibrary.CacheUtils; import com.atguigu.baselibrary.DensityUtil; import com.atguigu.beijingnews.R; import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; public class GuideActivity extends AppCompatActivity { @InjectView(R.id.viewpager) ViewPager viewpager; @InjectView(R.id.btn_start_main) Button btnStartMain; @InjectView(R.id.ll_group_point) LinearLayout llGroupPoint; @InjectView(R.id.iv_red_point) ImageView ivRedPoint; /** * 数据集合 */ private int[] ids = {R.drawable.guide_1, R.drawable.guide_2, R.drawable.guide_3}; private int leftMagin; /** * 间距 = 第1个点距离左边距离- 第0个点距离左边的距离 * <p> * 红点移动的原理 * 红点移动距离 : 间距 = 手滑动的距离:屏幕宽 = 屏幕滑动的百分比 * 红点移动距离 = 间距 * 屏幕滑动的百分比 * <p> * 红点移动的坐标 = 起始坐标 + 红点移动距离 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_guide); ButterKnife.inject(this); initData(); } private void initData() { //设置适配器 viewpager.setAdapter(new MyPagerAdapter()); //监听页面的改变 viewpager.addOnPageChangeListener(new MyOnPageChangeListener()); //根据多少个页面添加多少个灰色的点 for (int i = 0; i < ids.length; i++) { ImageView imageView = new ImageView(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DensityUtil.dip2px(this,10), DensityUtil.dip2px(this,10)); if (i != 0) { //设置灰色点的简介 params.leftMargin = DensityUtil.dip2px(this,10); } imageView.setLayoutParams(params); imageView.setImageResource(R.drawable.point_normal); //添加到线性布局 llGroupPoint.addView(imageView); } //View生命周期:测量--布局--绘制 ivRedPoint.getViewTreeObserver().addOnGlobalLayoutListener(new MyOnGlobalLayoutListener()); } class MyOnGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener { @Override public void onGlobalLayout() { ivRedPoint.getViewTreeObserver().removeGlobalOnLayoutListener(this); //间距 = 第1个点距离左边距离- 第0个点距离左边的距离 leftMagin = llGroupPoint.getChildAt(1).getLeft() - llGroupPoint.getChildAt(0).getLeft(); Log.e("TAG","leftMagin=="+leftMagin); } } class MyOnPageChangeListener implements ViewPager.OnPageChangeListener { /** * 当滑动了页面的时候回调 * * @param position 当前滑动页面的位置 * @param positionOffset 滑动的百分比 * @param positionOffsetPixels 滑动的单位(像数) */ @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // 红点移动距离 : 间距 = 手滑动的距离:屏幕宽 = 屏幕滑动的百分比 // 红点移动距离 = 间距 * 屏幕滑动的百分比 // int maginLeft = (int) (leftMagin * positionOffset); // 红点移动的坐标 = 起始坐标 + 红点移动距离 // maginLeft =position * leftMagin + (int) (leftMagin * positionOffset); int maginLeft = (int) (leftMagin*(position + positionOffset)); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) ivRedPoint.getLayoutParams(); //距离左边的距离产生变化 params.leftMargin = maginLeft; ivRedPoint.setLayoutParams(params); Log.e("TAG","maginLeft=="+maginLeft+","+"positionOffset=="+positionOffset+",positionOffsetPixels=="+positionOffsetPixels); } /** * 当某个页面被选中的时候回调 * * @param position */ @Override public void onPageSelected(int position) { if (position == ids.length - 1) { //显示按钮 btnStartMain.setVisibility(View.VISIBLE); } else { //隐藏按钮 btnStartMain.setVisibility(View.GONE); } } /** * 当状态变化的时候回调 * * @param state */ @Override public void onPageScrollStateChanged(int state) { } } class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { return ids.length; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView = new ImageView(GuideActivity.this); imageView.setBackgroundResource(ids[position]); //添加到ViewPager container.addView(imageView); return imageView; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } @OnClick(R.id.btn_start_main) public void onClick() { //1.保存参数,记录已经进入过引导页面,下次就不进 CacheUtils.putBoolean(this,"start_main",true); //Toast.makeText(this, "进入主页面", Toast.LENGTH_SHORT).show(); //2.进入主页面 Intent intent = new Intent(this,MainActivity.class); startActivity(intent); finish(); } }