色々と試験を繰り返し、出来そうな事をまとめる。
【activity_main.xml】でページごとにLayoutでまとめて、対応したクラスを作る。共通データはメインデータクラスでまとめる。優先度の高いページを下へ記述する。切り替えはページのOn()、Off()で行う。表示されているページのonTouchEvent()を振り分けて実行する。
【activity_main.xml】
< ?xml version="1.0" encoding="utf-8"?>
< androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- main image view - - >
<ViewSwitcher
android:id="@+id/viewSwitcher"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- thumbnail page -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/thumbnail_page"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent" >
・・・省略・・・
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- directory page -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/directory_page"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
・・・省略・・・
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
【MainActivity.java】
public class MainActivity extends AppCompatActivity {
private MyMainData mainData;
private MyMainPage mainPage;
private MyThumbnailPage thumbnailPage;
private MyDirectoryPage directoryPage;
・・・省略・・・
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//// 変数初期化
mainData = new MyMainData( this );
mainPage = new MyMainPage( mainData );
thumbnailPage = new MyThumbnailPage( mainData );
directoryPage = new MyDirectoryPage( mainData );
thumbnailPage.setPageLayout( (ConstraintLayout)findViewById( R.id.thumbnail_page) );
・・・省略・・・
directoryPage.setPageLayout( (ConstraintLayout)findViewById( R.id.directory_page) );
・・・省略・・・
initThumbnailPage();
initDirectoryPage();
}
private void initThumbnailPage() {
・・・省略・・・
}
private void initDirectoryPage() {
・・・省略・・・
}
・・・省略・・・
@Override
public boolean onTouchEvent(MotionEvent event) {
if ( directoryPage.isDisplay() ) {
if ( directoryOnTouchEvent(event) ) return true;
} else if ( thumbnailPage.isDisplay() ) {
if ( thumbnailOnTouchEvent(event) ) return true;
} else {
if ( imageOnTouchEvent(event) ) return true;
}
return super.onTouchEvent(event);
}
private boolean directoryOnTouchEvent(MotionEvent event) {
switch ( event.getActionMasked() ) {
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
break;
}
return false;
}
private boolean thumbnailOnTouchEvent(MotionEvent event) {
switch ( event.getActionMasked() ) {
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
break;
}
return false;
}
private boolean imageOnTouchEvent(MotionEvent event) {
switch ( event.getActionMasked() ) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
return true;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
break;
}
return false;
}
・・・省略・・・
}
【MyMainData.java】
public class MyMainData {
private Context mContext;
private MyDirectory mFolderItemList;
・・・省略・・・
MyMainData( Context context ) {
mContext = context;
}
public Context getContext() {
return mContext;
}
・・・省略・・・
}
【MyMainPage.java】
public class MyMainPage {
private MyMainData mainData;
・・・省略・・・
MyMainPage( MyMainData mainData ) {
this.mainData = mainData;
}
・・・省略・・・
}
【MyThumbnailPage.java】
public class MyThumbnailPage {
private MyMainData mainData;
private ConstraintLayout mPageLayout;
・・・省略・・・
MyThumbnailPage(MyMainData mainData ) {
this.mainData = mainData;
}
public ConstraintLayout getPageLayout() {
return mPageLayout;
}
public void setPageLayout( ConstraintLayout constraintLayout ) {
mPageLayout = constraintLayout;
}
public void off() {
mPageLayout.setVisibility(View.GONE);
}
public void on() {
mPageLayout.setVisibility(View.VISIBLE);
}
public boolean isDisplay()
{
return ( mPageLayout.getVisibility() == View.VISIBLE );
}
・・・省略・・・
}
【MyDirectoryPage.java】
public class MyDirectoryPage {
private MyMainData mainData;
private ConstraintLayout mPageLayout;
・・・省略・・・
MyDirectoryPage(MyMainData mainData ) {
this.mainData = mainData;
}
public ConstraintLayout getPageLayout() {
}
public void setPageLayout( ConstraintLayout constraintLayout ) {
}
public void on() {
}
public void off() {
}
public boolean isDisplay()
{
}
・・・省略・・・
}
試験的にはページ切り替えも問題ない。メモリ消費を考慮しつつ、隠れたページの切り離せるオブジェクトは切り離した方がいいかもしれない。