新手引导页

来源:互联网 发布:java web尚学堂 编辑:程序博客网 时间:2024/06/07 22:54

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的布局@Overridepublic Object instantiateItem(ViewGroup container, int position) {ImageView view = mImageViewList.get(position);container.addView(view);return view;}// 销毁item@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}}}


0 0
原创粉丝点击