Слайдер

Вы можете использовать ползунки, чтобы отобразить панель загрузки, прогресса или навигации в нижней части экрана. Слайдеры — это глобальные UX-компоненты, и к ним следует относиться с осторожностью при их внедрении в Glassware.


Слайдер прокрутки

Ползунки прокрутки используются для указания положения карточки при пролистывании нескольких карточек. Вы можете создать эффект того же типа, используя Slider.Scroller .

  1. Используйте Slider.from() , чтобы создать Slider , который использует View для отображения слайдера.
  2. Создайте Slider.Scroller с помощью startScroller() и установите максимальную и начальную позиции.

Вот простая реализация, которая анимирует прокрутку до следующей позиции, когда пользователь нажимает:

public final class SliderActivity extends Activity {

    private static final int MAX_SLIDER_VALUE = 5;
    private static final long ANIMATION_DURATION_MILLIS = 5000;

    private CardScrollView mCardScroller;
    private Slider mSlider;

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);

        // Create the cards for the view
        mCardScroller = new CardScrollView(this);
        mCardScroller.setAdapter(new CardAdapter(createCards()));

        // Set the view for the Slider
        mSlider = Slider.from(mCardScroller);

        mCardScroller.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                processSliderRequest(position+1);
            }
        });

        setContentView(mCardScroller);
    }

    private void processSliderRequest(position) {
        Slider.Scroller scroller = mSlider.startScroller(MAX_SLIDER_VALUE, 0);

        // Animate the slider to the next position. The slider
        // automatically hides after the duration has elapsed
        ObjectAnimator.ofFloat(scroller, "position", 0, position)
            .setDuration(ANIMATION_DURATION_MILLIS)
            .start();
    }
}

Ползунок льготного периода

Ползунки льготного периода работают в действиях, где пользователю полезно видеть уведомление, но взаимодействие с пользователем не требуется. Вы можете добавить эту анимацию с помощью Slider.GracePeriod .

  1. Используйте Slider.from() , чтобы создать Slider , который использует View для отображения слайдера.
  2. Создайте GracePeriod.Listener и реализуйте onGracePeriodEnd() и onGracePeriodCancel() для обработки этих событий.
  3. Создайте Slider.GracePeriod и запустите анимацию, передав GracePeriod.Listener в метод startGracePeriod() .
  4. Переопределите onBackPressed() активности, чтобы обрабатывать жест смахивания вниз.
  5. Если пользователь проводит пальцем вниз, вызовите cancel() для Slider.GracePeriod , чтобы закрыть ползунок.

В следующем примере скроллер льготного периода запускается с помощью прослушивателя, который воспроизводит звук успеха, когда период заканчивается, и звук отклонения, если ползунок льготного периода отменен:

public final class SliderActivity extends Activity {

    ...
    private Slider.GracePeriod mGracePeriod;

    private final GracePeriod.Listener mGracePeriodListener =
        new GracePeriod.Listener() {

        @Override
        public void onGracePeriodEnd() {
            // Play a SUCCESS sound to indicate the end of the grace period.
            AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            am.playSoundEffect(Sounds.SUCCESS);
            mGracePeriod = null;
        }

        @Override
        public void onGracePeriodCancel() {
            // Play a DIMISS sound to indicate the cancellation of the grace period.
            AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            am.playSoundEffect(Sounds.DISMISSED);
            mGracePeriod = null;
        }
    };

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);

        // Create the cards for the view
        mCardScroller = new CardScrollView(this);
        mCardScroller.setAdapter(new CardAdapter(createCards()));

        // Set the view for the Slider
        mSlider = Slider.from(mCardScroller);

        mCardScroller.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                mGracePeriod = mSlider.startGracePeriod(mGracePeriodListener);
            }
        });

        setContentView(mCardScroller);
    }

    @Override
    public void onBackPressed() {
        // If the Grace Period is running,
        // cancel it instead of finishing the Activity.
        if (mGracePeriod != null) {
            mGracePeriod.cancel();
        } else {
            super.onBackPressed();
        }
    }
}

Определить слайдер

Определенные ползунки в основном используются для отображения прогресса, где вы можете рассчитать время завершения задачи. Вы можете добавить эту анимацию с помощью Slider.Determinate .

  1. Используйте Slider.from() , чтобы создать Slider , который использует View для отображения слайдера.
  2. Создайте Slider.Determinate с помощью startScroller() и установите максимальную и начальную позиции.
  3. Когда анимация завершится, вызовите метод hide() в Slider.Determinate , чтобы скрыть ползунок.

Вот простая реализация, которая анимирует скроллер в заданное положение при нажатии пользователем:

public final class SliderActivity extends Activity {

    ...
    private Slider.Determinate mDeterminate;

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);

        // Create the cards for the view
        mCardScroller = new CardScrollView(this);
        mCardScroller.setAdapter(new CardAdapter(createCards()));

        // Set the view for the Slider
        mSlider = Slider.from(mCardScroller);

        mCardScroller.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                   int position, long id) {
                mDeterminate = mSlider.startDeterminate(MAX_SLIDER_VALUE, 0);
                ObjectAnimator animator = ObjectAnimator.ofFloat(mDeterminate,
                    "position", 0, MAX_SLIDER_VALUE);

                // Hide the slider when the animation stops.
                animator.addListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        mDeterminate.hide();
                    }
                });

                // Start an animation showing the different positions of the slider.
                animator.setDuration(ANIMATION_DURATION_MILLIS).start();
            }
        });

        setContentView(mCardScroller);
    }
}

Неопределенный слайдер

Неопределенные ползунки можно использовать для загрузочных экранов, где сложно рассчитать момент завершения задачи. Вы можете добавить эту анимацию с помощью Slider.Indeterminate .

  1. Используйте Slider.from() , чтобы создать Slider , который использует View для отображения слайдера.
  2. Запустите анимацию с помощью метода Slider.startIndeterminate() .
  3. Когда вы будете готовы остановить анимацию, вызовите метод hide() в Slider.Indeterminate .

Вот простая реализация, которая создает неопределенный скроллер, когда пользователь нажимает на карточку, и скрывает его, когда пользователь нажимает снова:

public final class SliderActivity extends Activity {

    ...
    private Slider.Indeterminate mIndeterminate;

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);

        // Create the cards for the view
        mCardScroller = new CardScrollView(this);
        mCardScroller.setAdapter(new CardAdapter(createCards()));

        // Set the view for the Slider
        mSlider = Slider.from(mCardScroller);

        mCardScroller.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                   int position, long id) {
                // Toggle between showing/hiding the indeterminate slider.
                if (mIndeterminate != null) {
                    mIndeterminate.hide();
                    mIndeterminate = null;
                } else {
                    mIndeterminate = mSlider.startIndeterminate();
                }
        });

        setContentView(mCardScroller);
    }
}