Android 에서 WebView 상하 미끄럼 감청 문제 해결

어떤 때 는 웹 뷰 의 스크롤 이 벤트 를 감청 해 야 하지만 웹 뷰 는 슬라이딩 을 직접 감청 하 는 방법 이 없습니다.웹 뷰 의 원본 코드 를 보면 proctected void on ScrollChanged(int l,int t,int oldl,int oldt)방법 이 있 습 니 다.
이 방법 은보 호 받 기 때문에 우 리 는 직접 사용 할 수 없습니다.그래서 우 리 는 강 화 된 WebView 를 쓰 고 onScrollChanged 방법 을 다시 쓰 고 인 터 페 이 스 를 이용 하여 리 셋 합 니 다.

public class NewWebView extends WebView{

 private OnScrollChangeListener mOnScrollChangeListener;

 public NewWebView(Context context, AttributeSet attrs) {
  super(context, attrs);
 }

 @Override 
 protected void onScrollChanged(int l, int t, int oldl, int oldt) {
  super.onScrollChanged(l, t, oldl, oldt);
  // webview   
  float webcontent = getContentHeight() * getScale();
  //   webview   
  float webnow = getHeight() + getScrollY();
  if (Math.abs(webcontent - webnow) < 1) {
   //     
   mOnScrollChangeListener.onPageEnd(l, t, oldl, oldt);
  } else if (getScrollY() == 0) {
   //    
   mOnScrollChangeListener.onPageTop(l, t, oldl, oldt);
  } else { 
   mOnScrollChangeListener.onScrollChanged(l, t, oldl, oldt); 
  } 
 }

 public void setOnScrollChangeListener(OnScrollChangeListener listener) {
  this.mOnScrollChangeListener = listener; 
 }

 public interface OnScrollChangeListener {

  public void onPageEnd(int l, int t, int oldl, int oldt);

  public void onPageTop(int l, int t, int oldl, int oldt);

  public void onScrollChanged(int l, int t, int oldl, int oldt); 

 }

}

사용:

public class NewsActivity extends AppCompatActivity {

 private NewsWebView mWebView;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_news);
  mWebView = (NewsWebView) findViewById(R.id.web_view);
  mWebView.setOnScrollChangeListener(new NewsWebView.OnScrollChangeListener() {
   @Override
   public void onPageEnd(int l, int t, int oldl, int oldt) {
    Logs.d("      ");
   }

   @Override
   public void onPageTop(int l, int t, int oldl, int oldt) {
    Logs.d("      ");
   }

   @Override
   public void onScrollChanged(int l, int t, int oldl, int oldt) {
   }
  });

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기