Android: галерея веб-просмотров - PullRequest
5 голосов
/ 04 мая 2011

Я пытаюсь создать горизонтально прокручиваемый набор веб-просмотров, используя виджет Галерея. Проблема в том, что я не могу провести пальцем по видам, что, конечно, работает для галерей изображений. После кода поваренной книги в onCreate () I действия I:

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

Затем адаптер создает веб-просмотры и возвращает их для запрошенных индексов:

   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;
        }
    }

Проблема, похоже, заключается в том, что WebView настаивает на использовании событий касания, несмотря на отключение атрибута clickable. Я попытался создать OnTouchEventListener для представлений, а затем отправить события в галерею, но это, похоже, приводит к сбою программы.

Любые подсказки приветствуются.

Ответы [ 2 ]

6 голосов
/ 21 июля 2011

У меня была такая же проблема с Галереей WebViews, и я сделал следующее:

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;
            }
        }

}

Это позволяет мне прокручивать веб-контент по вертикали и нажимать на ссылки, в то время как горизонтальные прокрутки управляют галереей.

0 голосов
/ 04 мая 2011

Я бы посоветовал вам отображать снимки различных WebView с, и только действительный WebView в центре в качестве активного.Я могу только представить себе ресурсы, которые потреблялись бы для отображения нескольких WebView одновременно с загруженными тяжелыми веб-страницами.

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

...