package no.agens.depth; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.app.Fragment; import android.graphics.Color; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.ImageView; import android.widget.SeekBar; public class WaterFragment extends Fragment implements MenuAnimation { public static final int TRANSFORM_DURATION = 900; private boolean introAnimate; public WaterFragment() { } public void setIntroAnimate(boolean introAnimate) { this.introAnimate = introAnimate; } View root; MaterialMenuDrawable menuIcon; WaterSceneView waterScene; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { root = inflater.inflate(R.layout.fragment_water, container, false); waterScene = (WaterSceneView) root.findViewById(R.id.water_scene); setupFab(); introAnimate(); setupSeekbars(); setupMenuButton(); ((RootActivity) getActivity()).setCurretMenuIndex(0); return root; } private void setupSeekbars() { SeekBar waveSeekBar = (SeekBar) root.findViewById(R.id.wave_seekbar); SeekBar noiseSeekBar = (SeekBar) root.findViewById(R.id.noise_seekbar); WindFragment.setProgressBarColor(waveSeekBar, getResources().getColor(R.color.fab)); WindFragment.setProgressBarColor(noiseSeekBar, getResources().getColor(R.color.fab)); noiseSeekBar.setProgress(50); waveSeekBar.setProgress(50); waveSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { waterScene.setWaveHeight(progress / 4f * getResources().getDisplayMetrics().density); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); noiseSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { waterScene.setNoiseIntensity((float) progress / 100f); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); } private void setupMenuButton() { ImageView menu = (ImageView) root.findViewById(R.id.menu); menu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!((RootActivity) getActivity()).isMenuVisible) ((RootActivity) getActivity()).showMenu(); else ((RootActivity) getActivity()).onBackPressed(); } }); menuIcon = new MaterialMenuDrawable(getActivity(), Color.WHITE, MaterialMenuDrawable.Stroke.THIN, TRANSFORM_DURATION); menu.setImageDrawable(menuIcon); } private void introAnimate() { if (introAnimate) root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { root.getViewTreeObserver().removeOnGlobalLayoutListener(this); TransitionHelper.startIntroAnim(root, showShadowListener); hideShadow(); waterScene.postDelayed(new Runnable() { @Override public void run() { waterScene.setPause(true); } }, 10); } }); } private void setupFab() { root.findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { root.getViewTreeObserver().removeOnGlobalLayoutListener(this); TransitionHelper.startExitAnim(root); } }); WindFragment windFragment = new WindFragment(); windFragment.setIntroAnimate(true); ((RootActivity) getActivity()).goToFragment(windFragment); if (((RootActivity) getActivity()).isMenuVisible) ((RootActivity) getActivity()).hideMenu(); hideShadow(); waterScene.setPause(true); } }); } AnimatorListenerAdapter showShadowListener = new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); showShadow(); waterScene.setPause(false); } }; private void hideShadow() { View actionbarShadow = root.findViewById(R.id.actionbar_shadow); actionbarShadow.setVisibility(View.GONE); } private void showShadow() { View actionbarShadow = root.findViewById(R.id.actionbar_shadow); actionbarShadow.setVisibility(View.VISIBLE); ObjectAnimator.ofFloat(actionbarShadow, View.ALPHA, 0, 0.8f).setDuration(400).start(); } @Override public void animateTOMenu() { TransitionHelper.animateToMenuState(root, new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); waterScene.setPause(false); } }); menuIcon.animateIconState(MaterialMenuDrawable.IconState.ARROW); hideShadow(); waterScene.setPause(true); } @Override public void revertFromMenu() { TransitionHelper.startRevertFromMenu(root, showShadowListener); menuIcon.animateIconState(MaterialMenuDrawable.IconState.BURGER); waterScene.setPause(true); } @Override public void exitFromMenu() { TransitionHelper.animateMenuOut(root); waterScene.setPause(true); } }