Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 825b34e

Browse files
修复viewpager绑定指示器滑动不到指定位置的问题
该问题是因为viewpager回调onpagerscroll次数缺少一些中间变化过程导致
1 parent b48e8e8 commit 825b34e

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

tagindicatordemo/src/main/java/com/xujun/administrator/tagindicatordemo/PagerIndicatorActivity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ protected void initView() {
4646
mBtnStyle = (Button) findViewById(R.id.btn_style);
4747
// tv_all.setTextSize(TypedValue.COMPLEX_UNIT_PX,14);
4848
tv_all.setTypeface(null, Typeface.BOLD);
49+
tv_all.setOnClickListener(new View.OnClickListener() {
50+
@Override
51+
public void onClick(View v) {
52+
mViewPager.setCurrentItem(0);
53+
}
54+
});
4955
}
5056

5157
@Override

viewpagertabindicator/src/main/java/com/xujun/viewpagertabindicator/TabPagerIndicator.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ public TabPagerIndicator(Context context, AttributeSet attrs, int defStyle) {
166166
}
167167
}
168168

169+
169170
public void setIndicatorMode(IndicatorMode indicatorMode) {
170171
this.setIndicatorMode(indicatorMode, false);
171172
}
@@ -252,7 +253,6 @@ private void obtainAttrs(Context context, AttributeSet attrs) {
252253

253254
public void setViewPager(ViewPager pager) {
254255
this.pager = pager;
255-
256256
if (pager.getAdapter() == null) {
257257
throw new IllegalStateException("ViewPager does not have adapter instance.");
258258
}
@@ -390,6 +390,8 @@ private void scrollToChild(int position, int offset) {
390390
if (tabCount == 0) {
391391
return;
392392
}
393+
int newScrollInstance;
394+
393395
int newScrollX;
394396
View child = tabsContainer.getChildAt(position);
395397
int left = child.getLeft();
@@ -473,6 +475,7 @@ private class PageListener implements OnPageChangeListener {
473475

474476
@Override
475477
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
478+
Log.d("onPageScrolled--","position--"+position+"-----positionOffset-----"+positionOffset);
476479
currentPosition = position-startOffet;
477480
currentPositionOffset = positionOffset;
478481
if(currentPosition>=0){
@@ -486,6 +489,17 @@ public void onPageScrolled(int position, float positionOffset, int positionOffse
486489
Log.i(TAG, "onPageScrolled:width=" + width);
487490
scrollToChild(currentPosition, (int) (positionOffset * width));
488491
//调用这个方法重新绘制
492+
}else{
493+
if(pager.getCurrentItem()<startOffet){
494+
View child = tabsContainer.getChildAt(0);
495+
int width = child.getWidth();
496+
497+
if (!isSame) {
498+
width += horizontalPadding * 2;
499+
}
500+
Log.i(TAG, "onPageScrolled:width=" + width);
501+
scrollToChild(0, (int) (positionOffset * width));
502+
}
489503
}
490504
invalidate();
491505
if (delegatePageListener != null) {
@@ -509,8 +523,9 @@ public void onPageSelected(int position) {
509523

510524
lastSelectPosition =selectCurPotition;
511525
selectCurPotition =position-startOffet;
512-
Log.i("xujun", "lastSelectPosition:=" + lastSelectPosition);
513-
Log.i("xujun", "selectCurPotition:=" +selectCurPotition);
526+
Log.i("xujunonPageSelected", "position:=" + position);
527+
Log.i("xujunonPageSelected", "lastSelectPosition:=" + lastSelectPosition);
528+
Log.i("xujunonPageSelected", "selectCurPotition:=" +selectCurPotition);
514529

515530
if(selectCurPotition>=0){
516531
View currentTab = tabsContainer.getChildAt(selectCurPotition);

0 commit comments

Comments
 (0)