私はあなたが月の間でスワイプすることを可能にする私のAndroidアプリのためのカスタムカレンダービューを構築しています。カスタムカレンダーの正方形のビューを作成し、それをカスタムのカレンダーの月のビューに埋め込みました。すべてが1か月のスケールで完全に機能しています。
残念ながら、今は行き詰まっています。ここで、カスタムカレンダーの月のビューを無限ビューのページャーに埋め込んで、カレンダーを無制限に前後にスクロールできるようにします。
簡単なトリックを使用して、この水平ページャーを無限スクロールに適合させてみました。カレンダーの月のビューを3つ並べて保持し、ユーザーがスクロールした場所に基づいてリストを更新します。例...
- [7月、8月、9月](焦点は8月で、ユーザーは9月にスワイプします)
- [7月、8月、9月](現在は9月に焦点を当てています)
- [ 8月、8月、9月](8月を1つ左にシフト、7月を上書き)
- [8月、9月、9月](9月を1つ左にシフト、8月を上書き)
- [8月、9月、9月](9月中旬にビューを設定するので、再び中央に配置されます)
- [8月、9月、10月](9月2日を実際の翌月で上書き)
ただし、これを行うと、翌月にスワイプすると画面に目立つフラッシュが表示されます。
前方スクロールのコードは次のとおりです(注:後方スクロールにも同じ問題があります)
private void updateViewsForForwardScroll() {
// Note: INDEX_PREV = 0; INDEX_CURR = 1; INDEX_NEXT = 2
((CalendarMonthView) getChildAt(INDEX_PREV)).showMonth(oneMonthPriorTo(currentMonth));
((CalendarMonthView) getChildAt(INDEX_CURR)).showMonth(currentMonth);
setCurrentScreen(INDEX_CURR, false);
((CalendarMonthView) getChildAt(INDEX_NEXT)).showMonth(oneMonthAfter(currentMonth));
}
問題は、setCurrentScreen()がshowMonth(currentMonth)の前に終了するため、画面が設定されてもINDEX_CURRのビューが更新されていることだと思います。代わりに次の戦略を使用してそれを解決しようとしました...
- [7月、8月、9月](焦点は8月で、ユーザーは9月にスワイプします)
- [7月、8月、9月](現在は9月に焦点を当てています)
- [8月、9月](7月は削除しますが、リサイクルのために保管してください)
- [8月、9月、10月](7月をリサイクルして、代わりに10月を表示し、ビューを追加します)
現在フォーカスされているビューにはまったく触れていませんが、まだフラッシュがあります。今回は、9月から8月にかけて画面が点滅し、その後9月に戻ります。
だから私は何が間違っているのですか?ユーザーが知らないうちに、私がやろうとしていることを実行する方法はありますか?そうでない場合、活用できる既存のクラスはありますか?
(副次的な質問として、Android CalendarViewを視覚的にカスタマイズする方法はありますか?それは私のすべての問題を本当に解決します...)
前もって感謝します!