public class GuideActivity extends Activity {
private ViewPager mViewPager;
private LinearLayout llContainer;
private ImageView ivRedPoint;// 小红点
private int mPointDis;// 小红点移动距离
private ArrayList<ImageView> mImageViewList;
// 引导页图片数组
private int[] mImageIds = new int[] { R.drawable.guide_1,
R.drawable.guide_2, R.drawable.guide_3 };
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题
// 必须在setContentView之前调用
setContentView(R.layout.activity_guide);
llContainer = (LinearLayout) findViewById(R.id.ll_container);
mViewPager = (ViewPager) findViewById(R.id.vp_guide);
ivRedPoint = (ImageView) findViewById(R.id.iv_red_point);
initDate();
mViewPager.setAdapter(new GuideAdapter());
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
public void onPageSelected(int position) {
// 某个页面被选中
}
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
// 当页面滑动过程中的回调
System.out.println("当前位置:" + position + ";移动百分比"
+ positionOffset);
// 更新小红点距离
int leftMargin = (int) (mPointDis * positionOffset) + position
* mPointDis;// 计算小红点当前的左边距
RelativeLayout.LayoutParams parms = (RelativeLayout.LayoutParams) ivRedPoint
.getLayoutParams();
parms.leftMargin = leftMargin;
ivRedPoint.setLayoutParams(parms);
}
public void onPageScrollStateChanged(int state) {
}
});
/*
* 计算两个圆点的距离 移动距离=第二小圆点left值-第一个圆点的letf值 measure
* ->layout(确定位置)->draw(Activity的oncreat方法结束之后才会走此流程) mPointDis
* =llContainer
* .getChildAt(1).getLeft()-llContainer.getChildAt(0).getLeft();
* 监听layout方法结束的事件,位置确定好之后在获取圆点的间距 视图数
*/
ivRedPoint.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
public void onGlobalLayout() {
// 移除监听避免重复回调
ivRedPoint.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
// ivRedPoint.getViewTreeObserver().removeOnGlobalFocusChangeListener(this);
// layout执行结束的回调
mPointDis = llContainer.getChildAt(1).getLeft()
- llContainer.getChildAt(0).getLeft();
System.out.print("圆点距离" + mPointDis);
}
});
}
// 初始化数据
private void initDate() {
mImageViewList = new ArrayList<ImageView>();
for (int i = 0; i < mImageIds.length; i++) {
ImageView view = new ImageView(this);// this传一个context对象
view.setBackgroundResource(mImageIds[i]);
mImageViewList.add(view);
// 初始化小圆点
ImageView point = new ImageView(this);
point.setImageResource(R.drawable.shape_point_gray);// 设置图片
// 初始化布局参数,宽高包裹内容父控件是谁就是谁的布局参数
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
if (i > 0) {
// 从第二个点开始设置左边距
params.leftMargin = 10;
}
point.setLayoutParams(params);// 设置布局参数
llContainer.addView(point);// 给容器添加圆点
}
}
class GuideAdapter extends PagerAdapter {
// 返回item的个数
public int getCount() {
return mImageViewList.size();
}
@Override
// 判断object是不是一个view对象
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
// 初始化item的布局
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView view = mImageViewList.get(position);
container.addView(view);
return view;
}
// 销毁item
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
新手引导页
最新推荐文章于 2022-11-28 09:58:51 发布