単純に画像切り替えなら、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>
続く。