Dispositivo di scorrimento

Puoi utilizzare i dispositivi di scorrimento per mostrare una barra di caricamento, di avanzamento o di navigazione nella parte inferiore dello schermo. I dispositivi di scorrimento sono componenti UX globali e devono essere trattati con cautela durante l'implementazione nel Glassware.


Dispositivo di scorrimento

I dispositivi di scorrimento sono utilizzati per indicare la posizione di una scheda mentre scorri più schede. Puoi creare lo stesso tipo di effetto utilizzando Slider.Scroller.

  1. Usa Slider.from() per creare una Slider che utilizza un View per visualizzare il dispositivo di scorrimento.
  2. Crea Slider.Scroller utilizzando startScroller() e imposta le posizioni massime e iniziali.

Di seguito è riportata una semplice implementazione che anima uno scorrimento fino alla posizione successiva quando l'utente tocca:

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();
    }
}

Dispositivo di scorrimento del periodo di tolleranza

I dispositivi di scorrimento del periodo di tolleranza funzionano in attività in cui è utile per un utente visualizzare una notifica, ma non è richiesta alcuna interazione da parte dell'utente. Puoi aggiungere questa animazione utilizzando Slider.GracePeriod.

  1. Usa Slider.from() per creare una Slider che utilizza un View per visualizzare il dispositivo di scorrimento.
  2. Creare un elemento GracePeriod.Listener e implementare onGracePeriodEnd() e onGracePeriodCancel() per gestire questi eventi.
  3. Crea un elemento Slider.GracePeriod e avvia l'animazione passando da GracePeriod.Listener al metodo startGracePeriod().
  4. Sostituisci onBackPressed() dell'attività per gestire il gesto di scorrimento verso il basso.
  5. Se l'utente scorre verso il basso, chiama cancel() su Slider.GracePeriod per ignorare il dispositivo di scorrimento.

Nell'esempio seguente, lo scorrimento del periodo di tolleranza è avviato con un listener che riproduce un suono riuscito al termine del periodo e un suono ignorato se il dispositivo di scorrimento del periodo di tolleranza è annullato:

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();
        }
    }
}

Dispositivo di scorrimento Determina

Determina che i dispositivi di scorrimento vengono utilizzati principalmente per mostrare i progressi in cui puoi calcolare al termine di un'attività. Puoi aggiungere questa animazione utilizzando Slider.Determinate.

  1. Usa Slider.from() per creare una Slider che utilizza un View per visualizzare il dispositivo di scorrimento.
  2. Crea Slider.Determinate utilizzando startScroller() e imposta le posizioni massime e iniziali.
  3. Al termine dell'animazione, chiama il metodo hide() all'interno di Slider.Determinate per nascondere il dispositivo di scorrimento.

Di seguito è riportata una semplice implementazione che anima lo scorrimento fino a raggiungere la posizione impostata quando l'utente tocca:

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);
    }
}

Dispositivo di scorrimento indeterminato

Puoi utilizzare i dispositivi di scorrimento indeterminato per caricare le schermate in cui è difficile calcolare al termine dell'attività. Puoi aggiungere questa animazione utilizzando Slider.Indeterminate.

  1. Usa Slider.from() per creare una Slider che utilizza un View per visualizzare il dispositivo di scorrimento.
  2. Avvia l'animazione con il metodo Slider.startIndeterminate().
  3. Quando vuoi interrompere l'animazione, chiama il metodo hide() in Slider.Indeterminate.

Di seguito è riportata una semplice implementazione che crea lo strumento di scorrimento indeterminato quando l'utente tocca la scheda e la nasconde quando l'utente tocca di nuovo:

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);
    }
}