一.引导页面局局(一个viewpagerg ,一个button,和红点如图示)
1.把三张图片放到数组中 2.他建个数组集合 3.设置Viewpager背景图文件4设置Adapter文件
int imagerp[] ={ R.drawable.guide_1, R.drawable.guide_2,R.drawable.guide_3}; viewPagers=new ArrayList<>(); for (int x=0;x<imagerp.length;x++){ ViewPager viewPager = new ViewPager(this); viewPager.setBackgroundResource(imagerp[x]); viewPagers.add(viewPager); }
viewPager.setAdapter(new MyPagerAdapter());
class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { return viewPagers.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public Object instantiateItem(ViewGroup container, int position) { ViewPager imageView=viewPagers.get(position); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View)object);}
错1:在设置PagerAdapter时
private ArrayList<ViewPager> viewPagers;
ArraayList<ViewPager>写成了ArraayList<ImagertPager>不报任何错,但就是划不了图片
2.Button控件做个state_pressed选择器
3.红点划动制作
3.1实例一个图片并设置它的背景图片,.它们都属于线性布局里的集合
ImageView ponit=new ImageView(this); ponit.setBackgroundResource(R.drawable.red_ponit);
创建XML 一个恢一个红二个点(省shape设置)并放到线线布局中.
设置点的参数
LinearLayout.LayoutParams param=new LinearLayout.LayoutParams(50,50 ); if (x!=0){ param.leftMargin=25; } ponit.setLayoutParams(param);
linearLayout.addView(ponit);
3.2红点和图片一起划动
红点移动的距离其实就是aram.leftMargin的值,它是一个动态值.和屏的ViewPager一起动,哪么就设置屏幕划动的监听
(已知)屏划动的百分比=点划动的百分比
点划动的百分比=点划动的距离%点间距(计算)
点间距=第1个点到左边距离-第0个点到左边距离
(已知)屏划动的百分比=点划动的距离%点间距(计算)
点划动的距离=点间距(计算)*(已知)屏划动的百分比
3.3设置二个监听
linearLayout.getViewTreeObserver().addOnGlobalLayoutListener(new MyOnGlobalLayoutListener()); viewPager.addOnPageChangeListener(new MyOnPageChangeListener());
并在addOnPageChangeListener 加入红点,这时就要在原来三个灰点上叠加,修改原来布局为RelativeLayout,RelativeLayout内包含二个(LinearLayout> <ImageView)
3.3.1getViewTreeObserver().addOnGlobalLayoutListener的监听
class MyOnGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener { @Override public void onGlobalLayout() { leftmax=linearLayout.getChildAt(1).getLeft()-linearLayout.getChildAt(0).getLeft(); linearLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this); }
3.3.2 addOnPageChangeListener的监听
class MyOnPageChangeListener implements ViewPager.OnPageChangeListener{ //滚动中监听 /** * * @param position 当前划动页面位置 * @param positionOffset 当前划动页面百分比 * @param positionOffsetPixels 像素 */ @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { int movered= (int) (positionOffset*leftmax); RelativeLayout.LayoutParams params= (RelativeLayout.LayoutParams) image_red_point.getLayoutParams(); params.leftMargin=movered; image_red_point.setLayoutParams(params); } //滚动完成 @Override public void onPageSelected(int position) { } //滚动中状态改变监听 @Override public void onPageScrollStateChanged(int state) { } }
错1
params.leftMargin=movered
这个点的移动叁数要加上原来位子参数,红点才能移动即:
movered= (int) (position*leftmax+positionOffset*leftmax)