¿Cómo crear bounce scroll view en Android como iPhone?¿Cómo crear scrollview borrable en android?
Respuesta
Se llama overscroll en Android.
Ver http://developer.android.com/reference/android/widget/OverScroller.html y (por ejemplo) http://developer.android.com/reference/android/widget/ListView.html#setOverscrollFooter(android.graphics.drawable.Drawable)
Es sólo está disponible desde el nivel del API 9 en adelante.
Sin embargo, los dispositivos de Samsung parecen apoyar Permitir desplazamiento de forma nativa en Android 2.2
Añadir efecto de rebote a ScrollView en Android
Paso 1: crear un nuevo archivo en BounceScrollView com.base.view paquete
public class BounceScrollView extends ScrollView
{
private static final int MAX_Y_OVERSCROLL_DISTANCE = 200;
private Context mContext;
private int mMaxYOverscrollDistance;
public BounceScrollView(Context context)
{
super(context);
mContext = context;
initBounceScrollView();
}
public BounceScrollView(Context context, AttributeSet attrs)
{
super(context, attrs);
mContext = context;
initBounceScrollView();
}
public BounceScrollView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
mContext = context;
initBounceScrollView();
}
private void initBounceScrollView()
{
//get the density of the screen and do some maths with it on the max overscroll distance
//variable so that you get similar behaviors no matter what the screen size
final DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
final float density = metrics.density;
mMaxYOverscrollDistance = (int) (density * MAX_Y_OVERSCROLL_DISTANCE);
}
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)
{
//This is where the magic happens, we have replaced the incoming maxOverScrollY with our own custom variable mMaxYOverscrollDistance;
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, mMaxYOverscrollDistance, isTouchEvent);
}
}
Paso 2: En su diseño, por favor cambie
<ScrollView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
a
<com.base.view.BounceScrollView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
hola, gracias por la solución, funciona muy bien para mí. Actualice su código, tiene un pequeño error en: initBounceListView() debe ser initBounceScrollView();) –
Gracias por la solución, funciona perfecto. – ACengiz
este es genial !!!! ¡gracias! –
he mejorado versión de esta respuesta: https://stackoverflow.com/a/13391248/3256989. Así es mi versión (por ejemplo 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);
}
}
sólo tiene que utilizar OverScrollDecoratorHelper
ScrollView scrollView = (ScrollView) findViewById(R.id.scroll_view);
OverScrollDecoratorHelper.setUpOverScroll(scrollView);
HorizontalScrollView horizontalScrollView = (HorizontalScrollView) findViewById(R.id.horizontal_scroll_view);
OverScrollDecoratorHelper.setUpOverScroll(horizontalScrollView);
- 1. Android: Problema ScrollView
- 2. ocultar scrollview stick android
- 3. Android: ScrollView en LinearLayout vertical
- 4. Android scrollview onScrollChanged
- 5. Android ScrollView isFinished?
- 6. Android :: VideoView dentro de ScrollView
- 7. Android: altura total de ScrollView
- 8. Android: ScrollView force to bottom
- 9. cambiar ScrollView scrollBarStyle programmatically en Android
- 10. Múltiples WebViews en ScrollView dando problemas (Android)
- 11. Android RelativeLayout: cómo alinearParentBottom cuando se envuelve en un ScrollView?
- 12. ¿Cómo aumentar la altura de ScrollView en Android?
- 13. Borde de desvanecimiento de ScrollView de Android
- 14. Android scrollview autoscroll como texto se agrega
- 15. Problema de diseño de Android ScrollView
- 16. Android: Detección Cuando ScrollView toca fondo
- 17. Android ScrollView Tamaño de barra de desplazamiento
- 18. Cambiando el color del desplazamiento en scrollview en android
- 19. Eliminar barra de desplazamiento de ScrollView mediante programación en Android
- 20. Restablecer desplazamiento en ScrollView
- 21. Márgenes redundantes al agregar ImageView a ScrollView en Android
- 22. Usando el método smoothScrollBy en la clase ScrollView de Android
- 23. WindowSoftInputMode y ScrollView
- 24. Sincronizar dos ScrollView
- 25. crear un diseño de chatView en android
- 26. Cómo implementar ScrollView en Python/Kivy
- 27. ¿Cómo hacer 'fastScrollEnabled' como ListView en ScrollView?
- 28. Android scrollview horizontal se comporta como iPhone (paginación)
- 29. Two ListViews & ScrollView
- 30. Android: detectar cuando ScrollView ha terminado de desplazarse y rebotar?
Android 2.2 es el nivel API 8 - Qué quiere decir 2.1? – Izkata
Comentario válido: debería haber leído "API nivel 9"; He editado en consecuencia –