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

android OS & iPadOS の記録。

記録4:ViewSwitcher で画像を切り替え。

2021-07-11 01:26:36 | Android studio 日記

 単純に画像切り替えなら、ImageSwitcher だけど、画像の大きいものをスクロールさせる機能を付けるなら ViewSwitcher だろう。レイアウトの xml ファイルを2つ用意し、それぞれに ScrollView を記述。ImageView にファイル名リストから次の画像を読み出しセットして、ViewSwitcher で切り替える。切り替え時のアニメーションの種類が有るようなのでそのうち試す。

 

public class MainActivity extends AppCompatActivity {

    private ImageView imageView1, imageView2;

    private ViewSwitcher mViewSwitcher;
    private MyScrollView mMSV1, mMSV2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        mMSV1 = (MyScrollView) getLayoutInflater().inflate(R.layout.image1, null); // image1.xml を設定
        mMSV2 = (MyScrollView) getLayoutInflater().inflate(R.layout.image2, null); // image2.xml を設定

        mViewSwitcher = (ViewSwitcher) findViewById(R.id.viewSwitcher);

        mViewSwitcher.addView(mMSV1, 0);
        mViewSwitcher.addView(mMSV2, 1);

        mViewSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
        mViewSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));

        imageView1 = findViewById(R.id.image_view1); // image1.xml のid.image_view1
        imageView2 = findViewById(R.id.image_view2); // image2.xml のid.image_view2

    }

    @Override
    protected void onResume() {
        super.onResume();
        setImage( imageView1, fullPathName[ index ] ); // フルパス画像ファイル名から imageView へ画像をセット
        setImage( imageView2, fullPathName[ index ] ); // 実際は配列と標的Noを使ってクラスメソッドを呼び引数を渡す
   }

////// タッチイベントで次の画像をセットして、ViewSwitcherでビューを切り替える。
     if ( 画面右側をタップ ) {
        setNextImage();
        mViewSwitcher.showNext(); // 次を表示
     } else {
        setNextImage();
        mViewSwitcher.showPrevious(); // 戻って表示
     }
///////


    private void setNextImage() {
        if (mViewSwitcher.getNextView() == mMSV1) { // 次の切り替えビューを確認
            setImage( imageView1, fullPathName[ ++index ] ); // ViewSwitcher.addView(view, 0); に登録したもの
        } else {
            setImage( imageView2, fullPathName[ --index ] ); // ViewSwitcher.addView(view, 1); に登録したもの
        }
    }

    private void setImage(ImageView iView, String fullPathName) {

       // 受け取ったフルパスのファイル名から画像データを読み取り、iView へ設定する。
       // 基礎部分

    }

*注意:setImage( imageView1, fullPathName[ ++index ] ); の "++index" は概念であり、実際は配列参照の範囲内かチェックする。

 

【activity_main.xml】

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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:id="@+id/main_activity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/fullscreenBackgroundColor"
    android:theme="@style/ThemeOverlay.TestViewer3.FullscreenContainer"

    android:configChanges="orientation|screenSize"
    tools:context=".MainActivity">


    <LinearLayout
        android:id="@+id/L_Layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <ViewSwitcher
            android:id="@+id/viewSwitcher"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

</android.support.design.widget.CoordinatorLayout>

 

 

【image1.xml】

<?xml version="1.0" encoding="utf-8"?>
<com.packagename.testviewer3.MyScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:id="@+id/L_Layout1"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            tools:ignore="ObsoleteLayoutParam">

            <ImageView
                android:id="@+id/image_view1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:ignore="ContentDescription" />

        </LinearLayout>
    </HorizontalScrollView>
</com.packagename.testviewer3.MyScrollView>

 

 

【image2.xml】

<?xml version="1.0" encoding="utf-8"?>
<com.packagename.testviewer3.MyScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:id="@+id/L_Layout2"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            tools:ignore="ObsoleteLayoutParam">

            <ImageView
                android:id="@+id/image_view2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:ignore="ContentDescription" />

        </LinearLayout>
    </HorizontalScrollView>
</com.packagename.testviewer3.MyScrollView>

 

続く。