2012-03-01 3 views
1

Я создал WebView, который загружает html-файлы из папки ресурсов. Теперь, когда я собираюсь положить GestureDetecter в этот WebView, он перестает работать с ScrollView & ссылками внутри html-страницы. , но когда я удаляю GestureDetecter, как ScrollView & ссылки работают нормально.Handle Touch События внутри WebView в android

Ниже мой полный код,

(я использовал два HTML файлы 1.html & 2.html, вы можете использовать любые HTML файлы вместо него, которая может позволяет прокручивать и поместить оба файла в папку активов)

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.LinearLayout; 

public class DemoWebViewActivity extends Activity { 

    private MyWebView mWebView; 
    private WebViewClient client; 

    private LinearLayout lymain; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     lymain = new LinearLayout(getApplicationContext()); 
     lymain.setOrientation(1); 

     mWebView = new MyWebView(getApplicationContext()); 
     mWebView.setWebViewClient(client); 
     mWebView.setVerticalScrollBarEnabled(false); 
     mWebView.loadUrl("file:///android_asset/1.html"); 

     lymain.addView(mWebView); 
     setContentView(lymain); 
    } 

    class MyWebView extends WebView 
    { 
     Context context; 
     GestureDetector gd; 

     public MyWebView(Context context) { 
      super(context); 
      // TODO Auto-generated constructor stub 

      this.context = context; 
      gd = new GestureDetector(context, sogl); 
     } 

     public boolean onTouchEvent(MotionEvent event) { 

      return (gd.onTouchEvent(event) 
        || super.onTouchEvent(event)); 
     }; 

     GestureDetector.SimpleOnGestureListener sogl = new GestureDetector.SimpleOnGestureListener() { 

      public boolean onDown(MotionEvent event) { 

        return true; 
      } 
      public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { 

        if (event1.getRawX() > event2.getRawX() && StrictMath.abs(event1.getRawY()-event2.getRawY())<100) { 
         mWebView.loadUrl("file:///android_asset/2.html"); 
        } else if(event1.getRawX() < event2.getRawX() && StrictMath.abs(event1.getRawY()-event2.getRawY())<100){ 
         mWebView.loadUrl("file:///android_asset/1.html"); 
        } else { 

        } 
        return true; 
      } 
     }; 
    } 
} 

Любая помощь была бы принята с благодарностью. Благодаря!

+1

Не уверен, если это будет делать что-нибудь для вас, но у меня была проблема, прежде чем, где я получал сенсорную событие с целью помещенной над WebView. Это заставило WebView получать какие-либо данные. Установка mWebView.requestFocus (View.FOCUS_DOWN); как-то его исправил. –

+0

Не исправлено для меня .. !! :-( –

+0

использовать viewpager для прокрутки другого контента, а не прокрутки html .. это не решение, а просто вариант. –

ответ

2

попробовать использовать конструктор два аргумента, как это:

public MyWebView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    gd = new GestureDetector(context, sogl); 
} 
Смежные вопросы