タブレット用プログラムの書き止め

android OS & iPadOS の記録。

基礎。フラグメントを使わず少数ページの利用を考える。

2021-10-26 14:16:02 | Android studio 日記

色々と試験を繰り返し、出来そうな事をまとめる。
【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()
    {
    }

・・・省略・・・
}

 

試験的にはページ切り替えも問題ない。メモリ消費を考慮しつつ、隠れたページの切り離せるオブジェクトは切り離した方がいいかもしれない。