视频学习笔录2(引导页面)

一.引导页面局局(一个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)


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值