Android UIで次のことがどのように行われるかを理解しようとしています。私がこの問題を抱えているとは思いませんが、何を検索すればよいかわかりませんし、有用な情報もまだ見つかりませんでした。
私の状況:
現時点では、ページのフラグメントを取得するために FragmentStatePagerAdapter を拡張するクラスがあります。私は 1 つの「メイン」フラグメント (これはスクリーン フィルではありません!! <- ここでは非常に重要な情報です) と、それに続くいくつかのスクリーン フィル ページがあります。
また、ページが既に現在のページの背後にあるかのようにページを変換するPageTransformerもあります。) このページの DepthPageTransformer に似ています。ビューページャー
私の開始画面は次のようになります。
簡単に説明します。左側の角が丸い領域はメイン ページで、画面いっぱいに表示されません。そのメイン ページの背後には、2 番目のページが既に背景に表示されているはずです。メイン ページを左にスワイプすると、2 ページ目が次のアクティブ ページになります。
だから、ここに問題があります:
メイン ページの変換 (スワイプ) を開始するまで、2 番目のページは背景に表示されません。シナリオの作成を開始しました (問題のためまだ完了していません)。次のようになります。
奥の濃いグラデーションはandroidの標準グラデーションです。水色の部分が透明感のある引き延ばし画像です(パズルのピースの場合)
それで、メインページをスワイプし始めると、突然このようになります。メイン ページに戻った後、2 番目のページは引き続き表示されます。
これは、最初からあるべき状況です。
最初から 2 ページが表示されるようにするにはどうすればよいですか? これは主なアクティビティ コードです (基本的には、コメントなしの特定の android dev リンクからのコードです)。
public class MainActivity extends FragmentActivity {
private static final int NUM_PAGES = 5;
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_slider);
// Instantiate a ViewPager and a PagerAdapter.
mPager = (ViewPager) findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
mPager.setPageTransformer(true, new DepthPageTransformer());
}
@Override
public void onBackPressed() {
if (mPager.getCurrentItem() == 0) {
super.onBackPressed();
} else {
mPager.setCurrentItem(mPager.getCurrentItem() - 1);
}
}
/**
* A simple pager adapter that represents 5 ScreenSlidePageFragment objects,
* in sequence.
*/
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new ScreenMainSlideFragment();
}
return new ScreenSlideFragment();
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
}
そして、これがPageTransformerです(おそらく解決策があります):
public class DepthPageTransformer implements PageTransformer {
private static float MIN_SCALE = 1f;
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 0) { // [-1,0]
// Use the default slide transition when moving to the left page
view.setAlpha(1);
view.setTranslationX(0);
view.setScaleX(1);
view.setScaleY(1);
} else if (position <= 1) { // (0,1]
// Fade the page out.
view.setAlpha(0.75f + (1 - position) * 0.25f);
// Counteract the default slide transition
view.setTranslationX(pageWidth * -position);
// Scale the page down (between MIN_SCALE and 1)
float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
どうもありがとうございました!