Android -红点移动

#红点移动的原理

params.leftMargin = 间距间的滑动距离

公式:

间距间的滑动距离 : 间距  = 屏幕滑动 : 屏幕宽 = 屏幕滑动的百分比(已知)

间距间的滑动距离 : 间距   = 屏幕滑动的百分比

间距间的滑动距离 = 间距 * 屏幕滑动的百分比

求间距 ?

间距 = 第1点距离左边的距离 - 第0个距离左边的距离

最终的坐标 = 起始 + 间距间的滑动距离

1.求间距 -- 视图渲染-测量-指定位置-绘制

ivRedPoint.getViewTreeObserver().addOnGlobalLayoutListener(new MyOnGlobalLayoutListener());

class MyOnGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {

        @Override

        public void onGlobalLayout() {

            //取消注册

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {

                ivRedPoint.getViewTreeObserver().removeOnGlobalLayoutListener(this);

            }

            //间距 = 第1点距离左边的距离 - 第0个距离左边的距离

             marginLeft = llPointGroup.getChildAt(1).getLeft() - llPointGroup.getChildAt(0).getLeft();

            LogUtil.e("marginLeft=="+marginLeft);

        }

    }

2.设置页面得监听代码:

 viewpager.addOnPageChangeListener(new MyOnPageChangeListener());

class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {

        /**

         * 当页面滚动了的时候回调

         * @param position 当前哪个页面滚动

         * @param positionOffset 页面滑动的百分比

         * @param positionOffsetPixels 页面滑动多少像数

         */

        @Override

        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            //间距间的滑动距离 = 间距 * 屏幕滑动的百分比

            // float leftMagin = marginLeft * positionOffset;

            //leftMagin = position*marginLeft + marginLeft * positionOffset;

            float leftMagin = (position +   positionOffset)*marginLeft;

            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) ivRedPoint.getLayoutParams();

            LogUtil.e("position=="+position+",positionOffset=="+positionOffset+",positionOffsetPixels=="+positionOffsetPixels);

            params.leftMargin = (int) leftMagin;

            ivRedPoint.setLayoutParams(params);

            //最终的坐标 = 起始 + 间距间的滑动距离

        }

        /**

         * 当某个页面被选中的时候回调

         * @param position 被选中页面的下标位置

         */

        @Override

        public void onPageSelected(int position) {

            if(position ==imageViews.size()-1){

                //最后一个页面

                btnStartMain.setVisibility(View.VISIBLE);

            }else{

                //隐藏

                btnStartMain.setVisibility(View.GONE);

            }

        }

        /**

         * 页面滑动的状态改变的时候回调

         * @param state

         */

        @Override

        public void onPageScrollStateChanged(int state) {

        }

    }

 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容