C#基本常識之new症結字引見。本站提示廣大學習愛好者:(C#基本常識之new症結字引見)文章只能為提供參考,不一定能成為您想要的結果。以下是C#基本常識之new症結字引見正文
媒介
盡人皆知ScrollView是我們常常應用的一個UI控件,或許你在應用ScrollView的進程中會發明,當你想監聽ScrollView滑動的間隔時卻沒有適合的監聽器!固然在API 23中有setOnScrollChangeListener(View.OnScrollChangeListener l)
可使用,然則其實不兼容低版本的API。那怎樣辦呢?只好重寫ScrollView來完成對滑動間隔的監聽了。
話不多說,直接上代碼:
public class MyScrollView extends ScrollView { private OnScrollListener listener; /** * 設置滑動間隔監聽器 */ public void setOnScrollListener(OnScrollListener listener) { this.listener = listener; } public MyScrollView(Context context) { super(context); } public MyScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } // 滑動間隔監聽器 public interface OnScrollListener{ /** * 在滑動的時刻挪用,scrollY為已滑動的間隔 */ void onScroll(int scrollY); } @Override public void computeScroll() { super.computeScroll(); if(listener!=null){ listener.onScroll(getScrollY()); } } }
下面重寫的MyScrollView是在computeScroll()
完成監聽,由於ScrollView外部是經由過程Scroller來完成的,當滑動的時刻會去挪用computeScroll()
辦法,從而到達監聽的後果。
固然還有另外一種辦法,就是在onScrollChanged(int l, int t, int oldl, int oldt)
去監聽,最初的後果是一樣的:
public class MyScrollView extends ScrollView { private OnScrollListener listener; public void setOnScrollListener(OnScrollListener listener) { this.listener = listener; } public MyScrollView(Context context) { super(context); } public MyScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public interface OnScrollListener{ void onScroll(int scrollY); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if(listener != null){ listener.onScroll(t); } } }
總結
以上就是這篇文章的全體內容了,願望能對列位Android開辟者們有所贊助,假如有疑問年夜家可以留言交換。