裏話:
私はしばらくの間これをいじっていて、まともなドキュメントを見つけることができません。私はAPIレベル8をサポートする必要があることに固執しているので、ビューページャーは良い解決策のように思えました。pagerTitleStripで動作するようになりました。ただし、pagerTitleStripをスワイプするときに、ユーザーがビュー間をスワイプできるようにするだけです。私はそれをいくらか機能させています。
問題:
ボタンの上部(touch_move)、edittextフィールドなどをスワイプすると、viewpagerは他のビューのごく一部だけをウィンドウに表示します。ビュー間をスワイプするtouchmoveイベントがpagerTitleStripの上にない限り、何も起こらないようにします。
失敗した試み:
viewPagerのonTouchListenerとonTouchイベントアクション(touchmove、touchup、touchdown)を設定しました。これを使用して、ユーザーがpagerTitleStripをスワイプしているかどうかを判断します。
//in onCreate()
...
setContentView(R.layout.pager_adapter);
dashboardPagerAdapter = new DashboardPagerAdapter(
getSupportFragmentManager());
dashboardViewPager = (ViewPager) findViewById(R.id.dashboard_pager);
dashboardViewPager.setAdapter(dashboardPagerAdapter);
dashboardViewPager.setId(R.layout.activity_dashboard);
dashboardViewPager.setCurrentItem(DashboardPagerAdapter.DASHBOARD);
dashboardViewPager.setOnTouchListener(this);
...
// in onTouch
View pagerTitleArea = findViewById(R.id.pager_title_strip);
int pagerTitleBottomYLocation = pagerTitleArea.getBottom();
initialYPositionOfEvent = 100; // set the initial position out of range.
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN){
initialYPositionOfEvent = event.getY();
originWasTitleBar = (initialYPositionOfEvent > pagerTitleBottomYLocation) ? false : true ;
hasTouchDownEventOccured = true;
return true;
} else if (action == MotionEvent.ACTION_MOVE){
if(originWasTitleBar && hasTouchDownEventOccured){
return false;
} else {
return true;
}
} else {
if(originWasTitleBar && hasTouchDownEventOccured){
originWasTitleBar = false;
hasTouchDownEventOccured = false;
return false;
} else {
originWasTitleBar = false;
hasTouchDownEventOccured = false;
return true;
}
}