Jellybean 実機テストで元画像が 1,200x1,800 ドット2枚 canvas 合成で表示できない。
1,000x1,800 2枚合成なら表示される。
合成ではなく、LinearLayout で imageview を2枚並べるならどうか?
簡易モデルを作ってテストしたが、scrollview を使って画像2枚のスクロールはOK。
本来のプロジェクトに組み込むとエラーが噴出…。また、スライドでスクロールはできる。
しかし、imageview 2枚横並び表示でスクロール位置も指定できない(分からない)。
そして、実機テストまで行けない…。
ViewSwitcher は便利だが、メモリ容量が多い新機種用かな?
似たような効果の ImageSwitcher は、切り替えアニメーション設定が直感的で好感触。
ImageSwitcher に BitmapDrawable を入れれば、指定アニメーションで切り替え完了。
canvas を渡すこともできる。
しかし、画像サイズの違うファイルを切り替えると、大きいサイズの次に小さいサイズが表示された時に空白が表れる。その後に同じ画像を表示すると空白は消えてスクリーン枠に張り付く。症状の原因は分からず。
アニメーションの動作は面白いのでもう少し調べる。
あと、ImageView 自体にアニメーションを施せる。メソッドで効果をまとめて上手く使えれば、メモリ消費を抑えられるかもしれない。
2つの画像を並べて表示、これは鉄板なので canvas 合成からの ImageView に設定する事を基本に考える。
その ImageView をアニメーションで切り替える。それでダメならOSバージョンで分岐して画像サイズ制限で勝手に縮小処理だ。
追記。
ImageSwitcher で画像を切り替えた時、サイズが大きいものから小さいものに変わると空白が表示される現象の対策。
ImageSwitcher 初期設定で ImageView に次の一文を付け足す。拡縮無し表示。
imageView.setScaleType(ImageView.ScaleType.MATRIX);
mImageSwitcher = findViewById(R.id.image_switcher);
mImageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
ImageView imageView = new ImageView(getApplicationContext());
imageView.setScaleType(ImageView.ScaleType.MATRIX);
return imageView;
}
});
スクリーン左上に合わせて表示される。