private View fillSpecific(int position,int left){
  if (DEBUG)   Log.i(TAG,"fillSpecific() position: " + position + " left: "+ left+ M_FIRST_POSITION+ mFirstPosition);
  final int numRows=mNumRows;
  int motionColumnStart;
  int motionColumnEnd=-1;
  if (!mStackFromBottom) {
    motionColumnStart=position - (position % numRows);
  }
 else {
    final int invertedSelection=mItemCount - 1 - position;
    motionColumnEnd=mItemCount - 1 - (invertedSelection - (invertedSelection % numRows));
    motionColumnStart=Math.max(0,motionColumnEnd - numRows + 1);
  }
  final View temp=makeColumn(mStackFromBottom ? motionColumnEnd : motionColumnStart,left,true);
  mFirstPosition=motionColumnStart;
  final View referenceView=mReferenceView;
  if (referenceView == null) {
    return null;
  }
  final int horizontalSpacing=mHorizontalSpacing;
  View leftOf;
  View rightOf;
  if (!mStackFromBottom) {
    leftOf=fillLeft(motionColumnStart - numRows,referenceView.getLeft() - horizontalSpacing);
    adjustViewsLeftOrRight();
    rightOf=fillRight(motionColumnStart + numRows,referenceView.getRight() + horizontalSpacing);
    final int childCount=getChildCount();
    if (childCount > 0) {
      correctTooLeft(numRows,horizontalSpacing,childCount);
    }
  }
 else {
    rightOf=fillRight(motionColumnEnd + numRows,referenceView.getRight() + horizontalSpacing);
    adjustViewsLeftOrRight();
    leftOf=fillLeft(motionColumnStart - 1,referenceView.getLeft() - horizontalSpacing);
    final int childCount=getChildCount();
    if (childCount > 0) {
      correctTooRight(numRows,horizontalSpacing,childCount);
    }
  }
  if (temp != null) {
    return temp;
  }
 else   if (leftOf != null) {
    return leftOf;
  }
 else {
    return rightOf;
  }
}

private View fillSpecific ( int position , int left ) { if ( DEBUG ) Log . i ( TAG , "fillSpecific() position: " + position + " left: " + left + M_FIRST_POSITION + mFirstPosition ) ; final int numRows = mNumRows ; int motionColumnStart ; int motionColumnEnd = - 1 ; if ( ! mStackFromBottom ) { motionColumnStart = position - ( position % numRows ) ; } else { final int invertedSelection = mItemCount - 1 - position ; motionColumnEnd = mItemCount - 1 - ( invertedSelection - ( invertedSelection % numRows ) ) ; motionColumnStart = Math . max ( 0 , motionColumnEnd - numRows + 1 ) ; } final View temp = makeColumn ( mStackFromBottom ? motionColumnEnd : motionColumnStart , left , true ) ; mFirstPosition = motionColumnStart ; final View referenceView = mReferenceView ; if ( referenceView == null ) { return null ; } final int horizontalSpacing = mHorizontalSpacing ; View leftOf ; View rightOf ; if ( ! mStackFromBottom ) { leftOf = fillLeft ( motionColumnStart - numRows , referenceView . getLeft ( ) - horizontalSpacing ) ; adjustViewsLeftOrRight ( ) ; rightOf = fillRight ( motionColumnStart + numRows , referenceView . getRight ( ) + horizontalSpacing ) ; final int childCount = getChildCount ( ) ; if ( childCount > 0 ) { correctTooLeft ( numRows , horizontalSpacing , childCount ) ; } } else { rightOf = fillRight ( motionColumnEnd + numRows , referenceView . getRight ( ) + horizontalSpacing ) ; adjustViewsLeftOrRight ( ) ; leftOf = fillLeft ( motionColumnStart - 1 , referenceView . getLeft ( ) - horizontalSpacing ) ; final int childCount = getChildCount ( ) ; if ( childCount > 0 ) { correctTooRight ( numRows , horizontalSpacing , childCount ) ; } } if ( temp != null ) { return temp ; } else if ( leftOf != null ) { return leftOf ; } else { return rightOf ; } }
layout during a scroll that results from tracking motion events . places the mmotionposition view at the offset specified by mmotionviewleft , and then build surrounding views from there .
