2015-02-28 7 views
0

Я хочу добавить кнопку в конец макета. Когда я прокручу вверх, зайдите в список, я хочу, чтобы кнопка исчезла, и наоборот. Как и в приложении Twitter. Существует текстовый файл для быстрого твита в нижней части домашней страницы и при прокрутке вверх вид становится невидимым. Какой самый простой код делает это?Как добавить представление, которое исчезает при прокрутке вверх (вниз в списке) и появляется при прокрутке вниз?

ответ

1

Попробуйте это, создать пользовательский класс прокрутки,

public class CustomScrollView extends ScrollView { 

    private OnArrowChangeListener onArrowChangeListener = null; 
    private int id = 0; 

    public CustomScrollView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     // TODO Auto-generated constructor stub 
     id = getId(); 
    } 

    public CustomScrollView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
     id = getId(); 
    } 

    public CustomScrollView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
     id = getId(); 
    } 

    @Override 
    protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
     // TODO Auto-generated method stub 

     if (getChildCount() == 0) { 
      // no child 
     } else { 
      View view = (View) getChildAt(getChildCount() - 1); 
      if (view == null) { 
       super.onScrollChanged(l, t, oldl, oldt); 
       return; 
      } 
      int diff = (view.getBottom() - (getHeight() + getScrollY() + view.getTop())); 
      // Utility.log(VIEW_LOG_TAG, "@" + diff); 
      if (diff <= 10) { 
       // bottom reached 
       if (onArrowChangeListener != null) { 
        onArrowChangeListener.onReachedBottom(id); 
       } 
      } else if (t <= 10) { 
       // top reached 
       if (onArrowChangeListener != null) { 
        onArrowChangeListener.onReachedTop(id); 
       } 
      } else { 
       // middle 
       if (onArrowChangeListener != null) { 
        onArrowChangeListener.onVisibleBoth(id); 
       } 
      } 
     } 

     super.onScrollChanged(l, t, oldl, oldt); 
     // Utility.log(VIEW_LOG_TAG, "v ->" + t); 
    } 

    public OnArrowChangeListener getOnArrowChangeListener() { 
     return onArrowChangeListener; 
    } 

    public void setOnArrowChangeListener(OnArrowChangeListener onArrowChangeListener) { 
     this.onArrowChangeListener = onArrowChangeListener; 
    } 

    public void computeInitialScroll() { 
     CustomScrollView.this.post(new Runnable() { 
      @Override 
      public void run() { 
       if (CustomScrollView.this.getChildCount() > 0) { 
        View view = CustomScrollView.this.getChildAt(0); 
        if (view != null) { 
         int amount = CustomScrollView.this.getMaxScrollAmount(); 
         int height = view.getBottom() - view.getTop(); 
         if (height < amount || getHeight() > height) { 
          if (onArrowChangeListener != null) { 
           onArrowChangeListener.onInVisibleBoth(id); 
          } 
         } 
        } 
       } 
      } 
     }); 
    } 
} 

это в вашем Xml

<com.app.ui.CustomScrollView 
       android:id="@+id/scrollView" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:fillViewport="true" 
       android:paddingTop="10dp" > 

реализации OnScrollListener на вашей деятельности или фрагмент,

частный int pos = 0; listview.setSelection (pos);

@Override 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     // TODO Auto-generated method stub 
     pos = firstVisibleItem; 
     int first = firstVisibleItem; 
     int last = firstVisibleItem + visibleItemCount; 

     int adapterSize = totalItemCount; 
     if (visibleItemCount >= adapterSize) { 
      // Scroll center of items 
      return; 
     } 

     if (first > 0 && last < adapterSize) { 
      // middle 
      // both visible 
      btnUp.setVisibility(View.VISIBLE); 
      btnDown.setVisibility(View.VISIBLE); 
      return; 
     } 

     if (last == adapterSize) { 
      //Scroll to bottom 

      return; 
     } 

     if (first == 0) { 
      //Scroll to top 
      return; 
     } 

    } 

    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
     // TODO Auto-generated method stub 
    } 
1

Вы можете использовать http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html

и проверить listView.getChildAt(0).getTop() позицию при каждом вы прокруткой. Если разница между последней верхней позицией и текущей верхней позицией положительна, вы прокручиваете вверх. После этого вы можете установить видимость кнопки видимости/невидимости

Смежные вопросы