@@ -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}
0 commit comments