У меня есть два веб-представления, которые я хочу отображать один за другим, я имею в виду, что когда я провожу пальцем или перетаскиваю пальцем, первое веб-представление постепенно исчезает, уступая место второму в текущем представлении, это уже сделано , но теперь моя проблема в том, что горизонтальное движение моего пальца для перелистывания или перетаскивания заменяет событие горизонтальной прокрутки, поэтому, чтобы решить это, я решил посвятить движение одного пальца для горизонтальной прокрутки и движение двух пальцев для переворачивания через разные взгляды, но я понятия не имею, как это сделать, я уже провел некоторые исследования, но я не нашел интересных образцов.
это мой код (работает с переворотом одним пальцем):
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;
}
Поэтому, пожалуйста, предложите (или учебные пособия) заменить переворот одним пальцем, проводя его двумя пальцами.
Заранее спасибо