亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Android中為WebView制作滾動偵聽器

如何在Android中為WebView制作滾動偵聽器

HUWWW 2019-11-13 09:31:49
如何WebView在Android中實現Scroll Listener我嘗試了這個,但它沒有調用Log.i滾動Webview。package com.example.webview.full.width;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.webkit.WebView;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;public class scorllableWebview extends WebView implements OnScrollListener {Context ctx;AttributeSet atrs;public scorllableWebview(Context context) {    super(context);    ctx = context;}public scorllableWebview(Context context, AttributeSet atters){    super(context, atters);    ctx = context;    atrs = atters;}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,        int visibleItemCount, int totalItemCount) {    Log.i("onScroll", "Called");}@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {    Log.i("onScrollStateChanged", "Called");}}這是我的 MainActivity.javapackage com.example.webview.full.width;import android.app.Activity;import android.app.ProgressDialog;import android.os.Bundle;import android.view.Menu;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Toast;public class MainActivity extends Activity {ProgressDialog progressDialog;scorllableWebview wv;@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    wv = (scorllableWebview) findViewById(R.id.scorllableWebview);    wv.getSettings().setJavaScriptEnabled(true);    wv.getSettings().setBuiltInZoomControls(true);    wv.getSettings().supportZoom();    progressDialog = ProgressDialog.show(MainActivity.this,            "Loading Book...!", "Please Wait");    progressDialog.setCancelable(true);    });
查看完整描述

3 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

就像是:


public class ObservableWebView extends WebView

{

    private OnScrollChangedCallback mOnScrollChangedCallback;


    public ObservableWebView(final Context context)

    {

        super(context);

    }


    public ObservableWebView(final Context context, final AttributeSet attrs)

    {

        super(context, attrs);

    }


    public ObservableWebView(final Context context, final AttributeSet attrs, final int defStyle)

    {

        super(context, attrs, defStyle);

    }


    @Override

    protected void onScrollChanged(final int l, final int t, final int oldl, final int oldt)

    {

        super.onScrollChanged(l, t, oldl, oldt);

        if(mOnScrollChangedCallback != null) mOnScrollChangedCallback.onScroll(l, t, oldl, oldt);

    }


    public OnScrollChangedCallback getOnScrollChangedCallback()

    {

        return mOnScrollChangedCallback;

    }


    public void setOnScrollChangedCallback(final OnScrollChangedCallback onScrollChangedCallback)

    {

        mOnScrollChangedCallback = onScrollChangedCallback;

    }


    /**

     * Impliment in the activity/fragment/view that you want to listen to the webview

     */

    public static interface OnScrollChangedCallback

    {

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

    }

}

應該可以使用,但未經測試,但是可以在Android中的幾乎所有其他視圖上使用。


您將實現如下:


wv = (ObservableWebView) findViewById(R.id.scorllableWebview);

wv.setOnScrollChangedCallback(new OnScrollChangedCallback(){

    public void onScroll(int l, int t, int oldl, int oldt){

        if(t> oldt){

            //Do stuff

            System.out.println("Swipe UP");

            //Do stuff

        }

        else if(t< oldt){

            System.out.println("Swipe Down");

        }

        Log.d(TAG,"We Scrolled etc...");

    }

});


查看完整回答
反對 回復 2019-11-13
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

從API 23開始,您不再需要這樣做,您只需 在所有視圖(包括WebView)上使用新的OnScrollChangeListener即可。但是由于您仍然需要支持舊版本,因此仍然可以使用@ Chris.Jenkins的建議。我對提議的類進行了一些調整,使其與新的OnScrollChangeListener接口“更加兼容”:


public class ObservableWebView extends WebView {

private OnScrollChangeListener onScrollChangeListener;


public ObservableWebView(Context context) {

    super(context);

}


public ObservableWebView(Context context, AttributeSet attrs) {

    super(context, attrs);

}


public ObservableWebView(Context context, AttributeSet attrs, int defStyleAttr) {

    super(context, attrs, defStyleAttr);

}


@Override

protected void onScrollChanged(int l, int t, int oldl, int oldt) {

    super.onScrollChanged(l, t, oldl, oldt);

    if (onScrollChangeListener != null) {

        onScrollChangeListener.onScrollChange(this, l, t, oldl, oldt);

    }

}


public void setOnScrollChangeListener(OnScrollChangeListener onScrollChangeListener) {

    this.onScrollChangeListener = onScrollChangeListener;

}


public OnScrollChangeListener getOnScrollChangeListener() {

    return onScrollChangeListener;

}


public interface OnScrollChangeListener {

    /**

     * Called when the scroll position of a view changes.

     *

     * @param v          The view whose scroll position has changed.

     * @param scrollX    Current horizontal scroll origin.

     * @param scrollY    Current vertical scroll origin.

     * @param oldScrollX Previous horizontal scroll origin.

     * @param oldScrollY Previous vertical scroll origin.

     */

    void onScrollChange(WebView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY);

}

}


查看完整回答
反對 回復 2019-11-13
?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

這是公認的答案的更優雅的Kotlin版本



class ObservableWebView @JvmOverloads constructor(

        context: Context,

        attrs: AttributeSet? = null,

        defStyleAttr: Int = 0

) : WebView(context, attrs, defStyleAttr) {

    var scrollListener: WebViewScrollListener? = null


    override fun onScrollChanged(scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int) {

        super.onScrollChanged(scrollX, scrollY, oldScrollX, oldScrollY)

        when {

            scrollY > oldScrollY -> scrollListener?.onScrollDown()

            scrollY < oldScrollY -> scrollListener?.onScrollUp()

        }

        scrollListener?.onScroll(scrollX, scrollY, oldScrollX, oldScrollY)

    }

}


interface WebViewScrollListener{

    fun onScroll(scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int)


    fun onScrollDown()


    fun onScrollUp()

}


查看完整回答
反對 回復 2019-11-13
  • 3 回答
  • 0 關注
  • 788 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號