2014-05-10 5 views
0

스 와이프 동작을 webview에 추가하고 있지만 실행과 관련하여 제스처 감지 변수가 null 인 경우는 예외입니다. 제스처 탐지기를 초기화해야하는 게 무엇인지 말해 주시겠습니까? 내가 WebViews에 제스처 감지 구현했다WebView의 스 와이프 감지 null 제스처 예외

public final class CustomWebView extends WebView { 

    private GestureDetector gestureDetector; 
    private WebView webview; 
    private float currentScale; 
    private Context ctx; 
    /** 
    * @param context 
    * @param attrs 
    * @param defStyle 
    */ 
    public CustomWebView(Context context) { 
     super(context); 
     this.webview = this; 
     ctx = context; 
     gestureDetector = new GestureDetector(ctx , new CustomeGestureDetector()); 
     this.setGestureDetector(gestureDetector); 

    } 

    /** 
    * @param context 
    * @param attrs 
    * @param defStyle 
    */ 
    public CustomWebView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setWebViewClient(new WebViewClient() { 
      @Override 
      public void onScaleChanged(WebView view, float oldScale, float newScale) { 
       super.onScaleChanged(view, oldScale, newScale); 
       currentScale = newScale; 
      } 
     }); 
    } 

    /** 
    * @param context 
    * @param attrs 
    * @param defStyle 
    */ 
    public CustomWebView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    /* 
    * @see android.webkit.WebView#onScrollChanged(int, int, int, int) 
    */ 
    @Override 
    protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
     super.onScrollChanged(l, t, oldl, oldt); 
    } 

    /* 
    * @see android.webkit.WebView#onTouchEvent(android.view.MotionEvent) 
    */ 
    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     return gestureDetector.onTouchEvent(ev) || super.onTouchEvent(ev); 
    } 

    public void setGestureDetector(GestureDetector gestureDetector) { 
     this.gestureDetector = gestureDetector; 
    } 

    private class CustomeGestureDetector extends SimpleOnGestureListener {  
     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      if(e1 == null || e2 == null) return false; 
      if(e1.getPointerCount() > 1 || e2.getPointerCount() > 1) return false; 
      else { 
       try { // right to left swipe .. go to next page 
        if(e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 800) { 
         //do your stuff 
         String url = "http://www.stackoverflow.com"; 
         Intent i = new Intent(Intent.ACTION_VIEW); 
         i.setData(Uri.parse(url)); 
         ctx.startActivity(i); 
         return true; 
        } //left to right swipe .. go to prev page 
        else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 800) { 
         //do your stuff 
         String url = "http://www.google.com"; 
         Intent i = new Intent(Intent.ACTION_VIEW); 
         i.setData(Uri.parse(url)); 
         ctx.startActivity(i); 
         return true; 
        } //bottom to top, go to next document 
        else if(e1.getY() - e2.getY() > 100 && Math.abs(velocityY) > 800 
          && webview.getScrollY() >= currentScale * (webview.getContentHeight() - webview.getHeight())) { 
         //do your stuff 
         return true; 
        } //top to bottom, go to prev document 
        else if (e2.getY() - e1.getY() > 100 && Math.abs(velocityY) > 800) { 
         //do your stuff 
         return true; 
        } 
       } catch (Exception e) { // nothing 
       } 
       return false; 
      } 
     } 
    } 

} 
+0

사용한 샘플 코드가 추가되었습니다. 언젠가 코드를 체크 아웃 할 것입니다. –

답변

1

: 아래는 내 코드

적용 부분

wv = (CustomWebView)this.findViewById(R.id.webViewX); 
    //wv = new CustomWebView(this); 
    WebSettings settings = wv.getSettings(); 
    settings.setDefaultTextEncodingName("UTF-8"); 
    //settings.setCacheMode(WebSettings.LOAD_NO_CACHE); 
    settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
    //settings.setRenderPriority(WebSettings.RenderPriority.HIGH); 
    settings.setBuiltInZoomControls(true); 

사용자 정의 웹보기입니다. 당신을 도울 수 있습니다 너무

http://vshivam.wordpress.com/2013/09/02/privly-reading-app-integration-and-detecting-swipe-gesture/

확인이를. 이것은 스 와이프 방향을 감지하는 더 좋은 방법입니다. IMHO : http://vshivam.wordpress.com/2014/04/28/detecting-up-down-left-right-swipe-on-android/

+0

webview 내부에서 onCLick 링크 또는 이미지를 잡으면 어떨까요? –

+0

을 사용하여 webview에서 이벤트를 catch하려면 JavaScript를 사용해야합니다. JS를 사용하여 인터페이스를 작성하여 java의 메소드를 호출 할 수 있습니다. 다음을 확인하십시오 : http://vshivam.wordpress.com/2013/07/04/week-2-5-androidjsbridge/ –

관련 문제