ViewPager によく似たカスタム ページャーを実装しました。スクロール効果を出すには、canvas を使用します。新しいデバイス (Android 4.2) では意図したとおりに動作しますが、古いデバイス (Android 2.3) では機能しません。
onDrawは次のようになります
Log.d(TAG, "onDraw()");
if (mSwipe != null) {
Log.d(TAG, "Swipe effect=" + (mSwipe.lastX - mSwipe.startX));
canvas.translate(mSwipe.lastX - mSwipe.startX, 0);
}
Page current;
current = getPage(mPosition);
if (current != null) {
if (mPosition != 0) {
Log.d(TAG, "Offset effect=" + current.offset.left);
canvas.translate(current.offset.left, 0);
}
Log.d(TAG, "Pager width=" + getWidth());
Log.d(TAG, "Child width=" + current.view.getWidth());
current.view.draw(canvas);
// ...
// Commented out. Used to draw pages around.
// ...
}
Android 4.2 の出力:
onDraw()
Pager width=1080
Child width=960
Android 2.3 の出力:
onDraw()
Pager width=480
Child width=420
私のテストページは、無地の背景といくつかのテキストを持つ単なる TextView です。
私が新しいデバイスで得たのは、ビューと近くのビューの描画がうまく機能したため、背景だけが占めるということです。
古いデバイスでは、フルスクリーンの赤一色 (現在のビューの色) にテキストが表示されます。子供を描くと、テキストは正しい位置に表示されますが、実際には背景が画面全体を占め、(それが意味することは) 現在のページを上書きします。
なぜそれが起こるのか誰にも分かりますか?私はそれについて何ができますか?
PS 子の幅は正しいです。これら 2 つのデバイスの仕様は大きく異なりますが、子ビューは親 (私のカスタム) ビューよりも少し小さくする必要があります。
スクリーンショット: アプリケーションのタイトルを無視します。フラグメントとは関係ありません。このテスト プロジェクトはたまたま Eclipse プロジェクトのリストにあり、そこにコードを実装しました。
隣人なし:
隣人と: