#红点移动的原理
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) {
}
}