Skip to content

Commit ad7ddd7

Browse files
author
uis
committed
轮播去抖动
1 parent 647ffc1 commit ad7ddd7

2 files changed

Lines changed: 21 additions & 18 deletions

File tree

stacklayout/src/main/java/com/uis/stackview/StackHelper.java

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ void layoutChild(){
108108
needRelayout = false;
109109
int childSize = layout.getChildCount();
110110
int stackSize = layout.getRealStackSize();
111-
112111
for (int i = 0; i < childSize; i++) {
113112
int top, bottom, left, right, pivot;
114113
View view = layout.getChildAt(i);
@@ -254,8 +253,9 @@ void executeScroll(int dx) {
254253
}else{
255254
view = mAnimator.mAnimatorView;
256255
}
257-
view.setTranslationX(view.getTranslationX() + 1.0f*everyWidth/layout.getWidth() * dx);
258-
scaleTransChild(dx);
256+
int tx = (int)(1.0f*everyWidth/layout.getWidth() * dx);
257+
view.setTranslationX(view.getTranslationX() + tx);
258+
scaleTransChild(tx);
259259
}
260260
}
261261

@@ -269,13 +269,13 @@ void scaleTransChild(int dx){
269269
View v = layout.getChildAt(i);
270270
int sign = MODEL_LEFT == layout.stackEdgeModel ? 1 : -1;
271271
float rate = 1f * dx / layout.getWidth();
272-
int indexX = index;
272+
int indexX = index;
273273
int tx = originX.get( indexX+1) - originX.get(indexX);
274274
v.setTranslationX(v.getTranslationX() + rate * tx);
275275
int indexY = size - index;
276-
double scaley = Math.pow(layout.stackZoomY, indexY - 1);
277-
double scale = Math.pow(layout.stackZoomY, indexY);
278-
v.setScaleY(v.getScaleY() + (float) (sign * rate * (scaley - scale)));
276+
double scaley = Math.pow(layout.stackZoomY, indexY - 1 -first);
277+
double scale = Math.pow(layout.stackZoomY, indexY-first);
278+
v.setScaleY(Math.min(v.getScaleY() + (float) (sign * rate * (scaley - scale)),(float) scaley));
279279
index++;
280280
}
281281
}
@@ -338,14 +338,16 @@ void setAutoPlay(boolean looper){
338338
private void addBottomView(){
339339
int cnt = getItemCount();
340340
int stackSize = layout.getRealStackSize();
341-
displayPosition += 1;
342-
displayPosition %= cnt;
343-
int index = (stackSize - 1 + displayPosition) % cnt;
344-
View view = getStackView();
345-
layout.getAdapter().onBindView(view, index);
346-
layout.addView(view, 0);
347-
needRelayout = true;
348-
layout.getAdapter().onItemDisplay(displayPosition);
341+
if(layout.getChildCount() < stackSize+1) {
342+
displayPosition += 1;
343+
displayPosition %= cnt;
344+
int index = (stackSize - 1 + displayPosition) % cnt;
345+
View view = getStackView();
346+
layout.getAdapter().onBindView(view, index);
347+
layout.addView(view, 0);
348+
needRelayout = true;
349+
layout.getAdapter().onItemDisplay(displayPosition);
350+
}
349351
}
350352

351353
/** 加入顶层 */
@@ -519,9 +521,10 @@ boolean filterClick(){
519521
return false;
520522
}
521523

522-
void log(String msg){
524+
static void log(String msg){
523525
StackTraceElement element = Thread.currentThread().getStackTrace()[3];
524526
Log.e("StackLayout", String.format("%1$s:%2$s(%3$s):%4$s", element.getClassName(),
525527
element.getMethodName(), element.getLineNumber(), msg));
528+
526529
}
527530
}

stacklayout/src/main/java/com/uis/stackview/StackLayout.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public void setLooperDelay(int mills){
156156

157157
@Override
158158
public boolean onInterceptTouchEvent(MotionEvent event) {
159-
//stackHelper.log("act="+event.getActionMasked());
159+
// stackHelper.log("act="+event.getActionMasked());
160160
int action = event.getActionMasked();
161161
switch (action) {
162162
case MotionEvent.ACTION_DOWN:
@@ -175,7 +175,7 @@ public boolean onInterceptTouchEvent(MotionEvent event) {
175175

176176
@Override
177177
public boolean onTouchEvent(MotionEvent event) {
178-
//stackHelper.log("act="+event.getActionMasked());
178+
// stackHelper.log("act="+event.getActionMasked());
179179
if(adapter == null || adapter.getItemCount() == 0){
180180
return false;
181181
}

0 commit comments

Comments
 (0)