2011-05-04 18 views
5

Estoy intentando crear un conjunto de vistas web desplazable horizontalmente, utilizando el widget Galería. El problema es que no puedo deslizar las vistas, lo que por supuesto funciona para galerías de imágenes. siguiente código de libro de cocina, en onCreate de la actividad() I:Android: Galería de vistas web

g = (Gallery) findViewById(R.id.chapter_browser); 
g.setAdapter(new WebViewAdapter(this)); 

A continuación, el adaptador crea las webviews y los devuelve para los índices solicitados:

public class WebViewAdapter extends BaseAdapter { 
     int mGalleryItemBackground; 
     private Context mContext; 

     private String[] pages = { 
       "test1.html", 
       "test2.html", 
       "test3.html", 
       "test4.html" 
     }; 

     public WebViewAdapter(Context c) { 
      mContext = c; 
     } 

     public int getCount() { 
      return pages.length; 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      WebView i = new WebView(mContext); 

      i.loadUrl("file:///android_asset/" + pages[position]); 
      i.setBackgroundResource(mGalleryItemBackground); 
      i.setWebViewClient(new WebViewClient()); 
      i.setLayoutParams(new Gallery.LayoutParams(100,100)); 
      i.setInitialScale(100); 
      i.setFocusable(false); 
      i.setClickable(false); 

      return i; 
     } 
    } 

El problema parece ser que el WebView insiste en eventos de consumo de contacto, a pesar de establecer su atributo clickable desactivado. Intenté crear un OnTouchEventListener para las vistas y luego enviar los eventos a la galería, pero eso parece bloquear el programa.

Cualquier pista apreciada.

Respuesta

0

Le sugiero que muestre instantáneas de los diferentes WebView s en su lugar, y solo el real WebView en el centro como el activo. Solo puedo imaginar los recursos que consumiría mostrando varias WebViews al mismo tiempo con pesadas páginas web cargadas.

http://developer.android.com/reference/android/webkit/WebView.html#capturePicture%28%29

+0

De hecho, eso es lo que terminé haciendo, exactamente por la razón que mencionas. Pero todavía estoy interesado en el problema general: ¿cómo se pueden interceptar los eventos de clics en WebViews, incluso si solo hay una WebView principal como vista principal? –

6

tuve el mismo problema con una galería de WebViews, y terminó haciendo lo siguiente:

public class MyGallery extends Gallery 
{ 

    private final int slop; 
    private float initialX; 
    private float initialY; 

    public MyGallery(Context context, AttributeSet attrs) 
     { 
     super(context, attrs); 

     slop = ViewConfiguration.get(context).getScaledTouchSlop(); 
     } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
     { 
     return false; 
     } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) 
     { 
     switch (ev.getAction()) 
      { 
      case MotionEvent.ACTION_DOWN: 
       /* 
       * Kludge: Both the gallery and the child need to see the 
       * gesture, until we know enough about it to decide who gets it. 
       */ 
       onTouchEvent(ev); 

       initialX = ev.getX(); 
       initialY = ev.getY(); 

       return false; 

      case MotionEvent.ACTION_MOVE: 
       float distX = Math.abs(ev.getX() - initialX); 
       float distY = Math.abs(ev.getY() - initialY); 

       if (distY > distX && distY > slop) 
        /* Vertical scroll, child takes the gesture. */ 
        return false; 

       /* 
       * If a horizontal scroll, we take the gesture, otherwise keep 
       * peeking. 
       */ 
       return distX > slop; 

      default: 
       return false; 
      } 
     } 

} 

Esto me permite desplazarse por el contenido de la web verticalmente, y haga clic en los enlaces, mientras horizontales las volutas conducen la galería.

Cuestiones relacionadas