перелистывание различных веб-просмотров двумя пальцами - PullRequest
0 голосов
/ 10 февраля 2012

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

это мой код (работает с переворотом одним пальцем):

XML-файл:

    <ViewFlipper android:id="@+id/details"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >  
        <WebView
          android:id="@+id/webview0"
          android:layout_width="fill_parent"
      android:layout_height="fill_parent"/>  
        <WebView
      android:id="@+id/webview1"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"/>   
    </ViewFlipper>

onCreate ():

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    vf = (ViewFlipper) findViewById(R.id.details);

    WebView MyWebView[] =new WebView[2];

    MyWebView[0] = (WebView) findViewById(R.id.webview0);
    MyWebView[0].setWebViewClient(new WebViewClient());
    MyWebView[0].getSettings().setJavaScriptEnabled(true);
    MyWebView[0].loadUrl("http://www.cnn.com");
    MyWebView[0].setOnTouchListener(new OnTouchListener() {            
        @Override
        public boolean onTouch(View v, MotionEvent event) {               
           touchHandler(v, event);
           return false;
        }
     });

    MyWebView[1] = (WebView) findViewById(R.id.webview1);
    MyWebView[1].setWebViewClient(new WebViewClient());
    MyWebView[1].getSettings().setJavaScriptEnabled(true);
    MyWebView[1].loadUrl("http://www.bbc.co.uk/");  
    MyWebView[1].setOnTouchListener(new OnTouchListener() {            
        @Override
        public boolean onTouch(View v, MotionEvent event) {
           touchHandler(v, event);              
           return false;
        }
     });

    viewOrder = new int[MyWebView.length];
    for (int i=0; i<MyWebView.length; i++) {
        viewOrder[i] = i;
        MyWebView[i].setId(i);
    }
}

метод, который делает переключение:

 public boolean touchHandler(View v, MotionEvent event) {
    float currentX = event.getX();

    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        startX = event.getX();

        currentView = vf.getCurrentView();

        movePageThreshold = (currentView.getWidth() / 5);

        int viewCount = viewOrder.length;
        for (int i=0; i<viewCount; i++) {
            //Log.i("MyApp", "ord=id:" + viewOrder[i] + "==" + cv.getId());
            if (viewOrder[i] == currentView.getId()) {
                curIdx = i;
                break;
            }
        }

        if (curIdx >= 0) {
            preIdx = curIdx - 1;
            nxtIdx = curIdx + 1;
            preIdx = (preIdx < 0         )?viewCount - 1:preIdx;
            nxtIdx = (nxtIdx >= viewCount)?0            :nxtIdx;

            prevView = vf.findViewById(viewOrder[preIdx]);
            nextView = vf.findViewById(viewOrder[nxtIdx]);
        }

        //Log.i(LOG_TAG, String.format("Pre=%d(%d),Cur=%d(%d),Nxt=%d(%d)"  ,preIdx,prevView.getId() ,curIdx,currentView.getId() ,nxtIdx,nextView.getId()));

        break;
    case MotionEvent.ACTION_MOVE:
        int travelDistanceX = (int)(currentX - this.startX);
        int fingerPosX = (int)currentX;

        if (flipMode == FLIPMODE_NOMOVE) {
            if (travelDistanceX > SWITCH_THRESHOLD) {
                flipMode = FLIPMODE_PREV;
            } else if
               ( travelDistanceX < (SWITCH_THRESHOLD * -1)  ) {
                flipMode = FLIPMODE_NEXT;
            } else {
                flipMode = FLIPMODE_NOMOVE;
            }
        }

        if (flipMode == FLIPMODE_PREV) {
            prevView.layout(fingerPosX - prevView.getWidth(), 
                      prevView.getTop(), 
                      fingerPosX , 
                      prevView.getBottom());

            vf.bringChildToFront(prevView);
            prevView.setVisibility(View.VISIBLE);

        }
        if ( flipMode == FLIPMODE_NEXT)  {
            nextView.layout(fingerPosX , 
                      nextView.getTop(), 
                      fingerPosX + currentView.getWidth() + nextView.getWidth(), 
                      nextView.getBottom());

            vf.bringChildToFront(nextView);
            nextView.setVisibility(View.VISIBLE);
        }
        break;

    case MotionEvent.ACTION_UP:

        int activeIdx = -1;
        if ((this.startX - currentX) > movePageThreshold ) {
            activeIdx = nxtIdx;
        }else if 
            ((this.startX - currentX) < (movePageThreshold * -1) ) {
            activeIdx = preIdx;
        } else {
            activeIdx = curIdx;
        }
        int activeId = viewOrder[activeIdx];
        for(int i=0; i<vf.getChildCount(); i++) {
            // Log.i("MyApp",String.format("vf_id:%d,sel_id:%d",vf.getChildAt(i).getId(),activeId));
            if (vf.getChildAt(i).getId() == activeId) {
                vf.setDisplayedChild(i);
                break;
            }
        }
        flipMode = 0;
    default:
        break;
    }
    return true;
}

Поэтому, пожалуйста, предложите (или учебные пособия) заменить переворот одним пальцем, проводя его двумя пальцами.

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...