package redstar.onboarding; import android.databinding.DataBindingUtil; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.Toast; import redstar.onboarding.databinding.ActivityMainBinding; import redstar.onboarding.adapter.ScenePagerAdapter; import redstar.onboarding.adapter.TextPagerAdapter; import redstar.onboarding.adapter.SceneTransformer; public class MainActivity extends AppCompatActivity { private static final String KEY_BUTTON_VISIBILITY = "KEY_BUTTON_VISIBILITY"; private static final String KEY_BUTTON_Y = "KEY_BUTTON_Y"; private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); SceneTransformer sceneTransformer = new SceneTransformer(); ScenePagerAdapter scenePagerAdapter = new ScenePagerAdapter(getSupportFragmentManager(), sceneTransformer); binding.tutorialPager.setAdapter(scenePagerAdapter); // set limit same as number of fragments binding.tutorialPager.setOffscreenPageLimit(3); binding.tutorialPager.setPageTransformer(true, sceneTransformer); TextPagerAdapter textAdapter = new TextPagerAdapter(); binding.textPager.setAdapter(textAdapter); binding.indicator.setViewPager(binding.textPager); binding.indicator.setSnap(true); binding.indicator.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { // do nothing } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // translate up start button if (position == 1) { binding.start.setVisibility(View.VISIBLE); binding.start.setTranslationY( binding.textPager.getBottom() * (1 - positionOffset)); binding.indicator.setAlpha(1 - positionOffset); } } }); // to control the two view pagers at once we put a layout above them that intercepts the touches binding.touchInterceptorLayout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { binding.tutorialPager.onTouchEvent(event); binding.textPager.onTouchEvent(event); return true; } }); binding.start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(getApplicationContext(), "Start clicked", Toast.LENGTH_SHORT).show(); } }); if (savedInstanceState != null) { // re-add the listeners from the scene fragments for (Fragment fragment : getSupportFragmentManager().getFragments()) { sceneTransformer.addSceneChangeListener( (SceneTransformer.SceneChangeListener) fragment); } } } @Override public void onSaveInstanceState(Bundle savedInstanceState) { savedInstanceState.putInt(KEY_BUTTON_VISIBILITY, binding.start.getVisibility()); savedInstanceState.putFloat(KEY_BUTTON_Y, binding.start.getTranslationY()); super.onSaveInstanceState(savedInstanceState); } @SuppressWarnings("ResourceType") public void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); binding.start.setVisibility(savedInstanceState.getInt(KEY_BUTTON_VISIBILITY)); binding.start.setTranslationY(savedInstanceState.getFloat(KEY_BUTTON_Y)); } }