红点移动的原理
2016-12-16 22:09
120 查看
/**
* 红点移动的原理
* view.leftMargin = 动态的值
* 要计算点的间距 = 第一个点距离左边的距离 - 第零个点距离左边的距离
* 点滑动的距离 :间距 = 屏幕滑动的距离 :屏幕的宽 = 0.5 = 移动屏幕的百分比
*
* 所有公式:
* 点滑动的的距离 :点的间距 = 移动屏幕的百分比
* 点滑动的距离 = 点的间距 * 移动屏幕的百分比
* 点移动的坐标 = 原来的坐标 + 点滑动的距离
*
* 已知的值有:
* 移动屏幕的百分比。【ViewPager有一个方法可以知道滑动屏幕的百分比】
* 点的间距
*/
* 红点移动的原理
* view.leftMargin = 动态的值
* 要计算点的间距 = 第一个点距离左边的距离 - 第零个点距离左边的距离
* 点滑动的距离 :间距 = 屏幕滑动的距离 :屏幕的宽 = 0.5 = 移动屏幕的百分比
*
* 所有公式:
* 点滑动的的距离 :点的间距 = 移动屏幕的百分比
* 点滑动的距离 = 点的间距 * 移动屏幕的百分比
* 点移动的坐标 = 原来的坐标 + 点滑动的距离
*
* 已知的值有:
* 移动屏幕的百分比。【ViewPager有一个方法可以知道滑动屏幕的百分比】
* 点的间距
*/
//计算间距 //一个view控件从创建到显示过程中经历的方法:构造方法 -> onMeasure -> onLayout -> onDraw //onLayout:在这个阶段肯定有距离了 //getViewTreeObserver:得到视图树的观察者 //addOnGlobalLayoutListener:添加监听器在全局布局中 iv_red_point.getViewTreeObserver().addOnGlobalLayoutListener(new MyOnGlobalLayoutListener()); //监听viewpager页面的改变 viewpager_guide.addOnPageChangeListener(new MyOnPageChangeListener()); } //实现OnPageChangeListener接口 【滑动viewpager相应的小红点也发生改变】 class MyOnPageChangeListener implements ViewPager.OnPageChangeListener { /** * 当页面滚动的时候回调此方法 * @param position 当前页面的位置 * @param positionOffset 位置偏移量:在屏幕上移动的百分比 * @param positionOffsetPixels 像素位置偏移: 屏幕上移动的像素 */ @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { Log.e(TAG, "position:当前页面的位置==" + position + ",positionOffset:在屏幕上移动的百分比==" + positionOffset + ",positionOffsetPixels:屏幕上移动的像素==" + positionOffsetPixels); //点滑动的间距 = 间距 * 移动屏幕的百分比 float point_distance = margLeft * positionOffset; //点移动的坐标 = 原来的坐标 + 点滑动的距离 point_distance = position * margLeft + margLeft * positionOffset; RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(10,10); params.leftMargin = (int) point_distance; iv_red_point.setLayoutParams(params); } /** * 当选中某个页面的时候回调此方法 * @param position 页面的位置 */ @Override public void onPageSelected(int position) { Log.e(TAG, "position:选中页面的位置==" + position); } /** * 当页面滑动状态发生改变的时候回调此方法 * @param state */ @Override public void onPageScrollStateChanged(int state) { Log.e(TAG, "state:当页面滑动状态发生改变的时候回调此方法==" + state); } } //实现ViewTreeObserver.OnGlobalLayoutListener接口 class MyOnGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener { @Override public void onGlobalLayout() { //得到一次立刻反注册 iv_red_point.getViewTreeObserver().removeGlobalOnLayoutListener(this); //要计算点的间距 = 第一个点距离左边的距离 - 第零个点距离左边的距离 margLeft = ll_point_group.getChildAt(1).getLeft() - ll_point_group.getChildAt(0).getLeft(); Log.e(TAG, "两点间距margLeft=="+margLeft); } }
相关文章推荐
- 移动广告sdk的原理
- 移动GPU渲染原理的流派——IMR、TBR及TBDR
- 【Android笔记 七】Android Sensor感应器介绍(三)获取用户移动方向,指南针原理
- 极光推送技术原理:移动无线网络长连接
- 手势图的设计原理(1)建立、开始、移动、结束、点击、长按
- 极光推送技术原理:移动无线网络长连接
- 极光推送技术原理:移动无线网络长连接
- 极光推送技术原理:移动无线网络长连接
- 视频移动侦测区域报警的原理、实现与应用
- 推送技术原理:移动无线网络长连接
- UE4移动组件详解(一)——移动框架与实现原理
- HTML5+开发移动app教程2-原理介绍
- 从源码出发浅析Android TV的焦点移动原理-下篇
- 麦克纳姆轮全向移动原理
- Android Sensor感应器介绍(三)获取用户移动方向,指南针原理
- 【转】极光推送技术原理:移动无线网络长连接
- 从源码出发浅析Android TV的焦点移动原理-上篇
- jquery移动listbox的值原理及代码
- jQuery拖动div、移动div、弹出层实现原理及示例
- 用户从手机的浏览器访问www.baidu.com,看到的可能跟桌面PC电脑,是不太一样的网页效果,会更适合移动设备使用。请简要分析一下,实现这种网页区分显示的原因及技术原理。