9
votes

Comment créer une vision de Scroll Bouncable à Android?

Comment créer un rebond ScrollView dans Android comme iPhone?


0 commentaires

4 Réponses :


4
votes

Ça s'appelle survol dans Android.
Voir http://developer.android.com/reference/andrroid/widget/overscroller. HTML et (Par exemple) http: // développeur .android.com / Référence / Android / Widget / Listview.html # SetoverScrollfooter (Android.Graphics.Drawable.Drawable.Drawable )

Il est seulement disponible au niveau de l'API 9 en avant.
Cependant, les appareils Samsung semblent supporter de manière nativement dans Android 2.2


2 commentaires

Android 2.2 est le niveau d'API 8 - voulez-vous dire 2.1?


Remarque valide: aurait dû lire "le niveau d'API 9"; J'ai édité en conséquence



22
votes

Ajouter un rebond effet sur ScrollView en Android

Étape 1 STRAR>: Créer un nouveau fichier BouncescrollView dans Package com.base.view P>

<com.base.view.BounceScrollView 
   android:id="@+id/list"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
/>


9 commentaires

Bonjour, merci pour la solution, ça marche idéal pour moi. Veuillez mettre à jour votre code, vous avez un peu d'erreur dans: initbouncelistview () devrait être initbouncescrollview (););


@Thien Merci pour la solution.Vous savez comment nous ajoutons l'en-tête et le pied de page dans ce rebond ScrollView?


Y a-t-il un moyen d'avoir un effet de rebond si le contenu à l'intérieur de la vue de défilement est inférieur à la hauteur de la vue de défilement?


Est-il possible pour listeView ??


@ARTURMOVESYAN Utilisez Android: ServercrollMode = "Toujours" pour ScrollView


Comment réaliser un effet de rebond lorsque ScrollView est défilé par programmation avec FullScroll (vue.focus_down);


Mais cela n'est pas lisse lors du défilement lentement. Il frappe tout en tirant sur le dessus ou en bas à un moment donné lorsqu'il est fait lentement.


@Shadow, je suis confronté au même problème, laissez-moi savoir si vous vous débarrassez de cela.


Malgrémement .. Même moi aussi face à la question en tirant dessus ou en bas, il est bloqué .. ne pouvait pas obtenir de solution ..



5
votes

J'ai une version améliorée de cette réponse: https://stackoverflow.com/a/13391248/3256989 . Donc, ma version est (exemple pour HorizontalScrollView):

public class HorizontalOverScrollView extends HorizontalScrollView {
    private static final int WIDTH_DEVIDER_OVERSCROLL_DISTANCE = 3;

    private TimeInterpolator mInterpolator;
    private int mMaxOverscrollDistance;
    private int mAnimTime;
    private long mStartTime;

    /**
     * Instantiates {@link HorizontalOverScrollView} object.
     */
    public HorizontalOverScrollView(final Context context) {
        super(context);
        init();
    }

    /**
     * Instantiates {@link HorizontalOverScrollView} object.
     */
    public HorizontalOverScrollView(final Context context, final AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    /**
     * Instantiates {@link HorizontalOverScrollView} object.
     */
    public HorizontalOverScrollView(final Context context, final AttributeSet attrs, final int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        final int widthPixels = getContext().getResources().getDisplayMetrics().widthPixels;
        mMaxOverscrollDistance = widthPixels / WIDTH_DEVIDER_OVERSCROLL_DISTANCE;
        mAnimTime = getContext().getResources().getInteger(android.R.integer.config_mediumAnimTime);
        mInterpolator = new DecelerateInterpolator();
    }

    @Override
    protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
        int overScrollDistance = mMaxOverscrollDistance;
        if (isTouchEvent) {
            mStartTime = AnimationUtils.currentAnimationTimeMillis();
        } else {
            final long elapsedTime = AnimationUtils.currentAnimationTimeMillis() - mStartTime;
            float interpolation = mInterpolator.getInterpolation((float) elapsedTime / mAnimTime);
            interpolation = interpolation > 1 ? 1 : interpolation;
            overScrollDistance -= overScrollDistance * interpolation;
            overScrollDistance = overScrollDistance < 0 ? 0 : overScrollDistance;
        }

        return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, overScrollDistance, maxOverScrollY, isTouchEvent);
    }
}


0 commentaires

2
votes

Il suffit d'utiliser survoldrolldecoratorhelper xxx

https://github.com/euverythingme/overscroll-decor


1 commentaires

Cela fonctionne très bien, sauf qu'il ignore les couches et les éléments de la vision de ScrollView chevauchent tout le reste