studio setcolorschemecolors recyclerview pullrefresh programacion hermosa hacer como android swiperefreshlayout

android - setcolorschemecolors - swiperefreshlayout recyclerview



SwipeRefreshLayout deshabilita la animaciĆ³n de arrastre al deslizar hacia abajo (3)

¿Es posible desactivar la animación de arrastre SwipeRefreshLayout al deslizar hacia abajo sin personalizar la clase?


Bueno, deshabilitar SwipeLayoutAnimanion parecía ser una tarea bastante simple, pero implica la replicación de la clase android.support.v4.widget.SwipeRefreshLayout dentro del proyecto.

El buceo en el código fuente revelará que SwipeRefreshLayout consta de tres clases:

Las tres clases deberían estar incluidas en el proyecto. Entonces SwipeRefreshLayout se puede personalizar de la siguiente manera:

Agregue un nuevo método público que controlará cualquiera de los diseños, debe seguir o no el gesto de deslizar hacia abajo:

private boolean mLayoutMovementEnabled = true; public void setLayoutMovementEnabled(boolean enabled) { mLayoutMovementEnabled = enabled; }

Todos los cálculos relacionados se realizan dentro de onTouchEvent() . Para deshabilitar el diseño siguiendo el movimiento,

updateContentOffsetTop((int) (offsetTop)); cadena debe ser cambiado a

if (mLayoutMovementEnabled) updateContentOffsetTop((int) (offsetTop));

La rutina completa modificada está abajo.

@Override public boolean onTouchEvent(MotionEvent event) { final int action = event.getAction(); boolean handled = false; switch (action) { case MotionEvent.ACTION_DOWN: mCurrPercentage = 0; mDownEvent = MotionEvent.obtain(event); mPrevY = mDownEvent.getY(); break; case MotionEvent.ACTION_MOVE: if (mDownEvent != null && !mReturningToStart) { final float eventY = event.getY(); float yDiff = eventY - mDownEvent.getY(); if (yDiff > mTouchSlop) { // User velocity passed min velocity; trigger a refresh if (yDiff > mDistanceToTriggerSync) { // User movement passed distance; trigger a refresh startRefresh(); handled = true; break; } else { // Just track the user''s movement setTriggerPercentage( mAccelerateInterpolator.getInterpolation( yDiff / mDistanceToTriggerSync)); float offsetTop = yDiff; if (mPrevY > eventY) { offsetTop = yDiff - mTouchSlop; } if (mLayoutMovementEnabled) updateContentOffsetTop((int) (offsetTop)); if (mPrevY > eventY && (mTarget.getTop() < mTouchSlop)) { // If the user puts the view back at the top, we // don''t need to. This shouldn''t be considered // cancelling the gesture as the user can restart from the top. removeCallbacks(mCancel); } else { updatePositionTimeout(); } mPrevY = event.getY(); handled = true; } } } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if (mDownEvent != null) { mDownEvent.recycle(); mDownEvent = null; } break; } return handled; }


Intenta llamar:

setEnabled(false)

en su vista SwipeRefreshLayout.


Una forma simple de desactivar el deslizamiento es establecer la distancia para activar la sincronización a un valor demasiado alto para ser alcanzado.

mSwipeLayout.setDistanceToTriggerSync(999999);