Come creare una visualizzazione di rimbalzo in Android come iPhone?Come creare scrollview rimbalzabili in Android?
risposta
Si chiama overscroll in Android.
Vedi http://developer.android.com/reference/android/widget/OverScroller.html e (per esempio) http://developer.android.com/reference/android/widget/ListView.html#setOverscrollFooter(android.graphics.drawable.Drawable)
È disponibile solo dal livello API 9 in poi.
Tuttavia, i dispositivi Samsung sembrano sostenere Overscroll nativamente in Android 2.2
Aggiungi effetto rimbalzo per ScrollView in Android
Fase 1: Creare un nuovo file in BounceScrollView pacchetto com.base.view
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);
}
}
Fase 2: AL layout, cambiare
<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"
/>
ciao, grazie per la soluzione, funziona benissimo per me. Si prega di aggiornare il codice, si ha un piccolo errore in: initBounceListView() dovrebbe essere initBounceScrollView();) –
Grazie per la soluzione, funziona perfettamente. – ACengiz
questo è fantastico !!!! grazie! –
ho migliorato versione di questa risposta: https://stackoverflow.com/a/13391248/3256989. Quindi la mia versione è (esempio per 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);
}
}
Basta usare 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. Come aumentare l'altezza di ScrollView in Android?
- 2. Come aggiungere scrollview a keyboardView in Android
- 3. Android ScrollView bordo dissolvenza
- 4. nascondi scrollview stick android
- 5. Android ScrollView isFinished?
- 6. ScrollView not Scrolling - Android
- 7. scrollView e footer issue in android
- 8. Android: ScrollView non sta scorrendo
- 9. Personalizzazione Android ScrollView verticale Scrollbar
- 10. Scrollview Android rimuovi luce blu
- 11. Scrollview all'interno di una scrollview nel numero di Android
- 12. ScrollView in entrambe le direzioni Android
- 13. Android: HorizontalScrollView all'interno di ScrollView
- 14. Animazione rotazione Android con ScrollView
- 15. Come impostare l'evento OnFling() di Gesture su ScrollView in Android?
- 16. Android - ScrollView come se foursquare con mappe + elenco
- 17. ViewPager in ScrollView
- 18. Cambiare il colore di oltre scorrimento in ScrollView in Android
- 19. Android: pin TabLayout all'inizio di Scrollview
- 20. ScrollView Android elevazione bambino clipping ombra
- 21. Android onScrollChanged per Scrollview Fired Multiple Times
- 22. Come utilizzare Recyclerview all'interno Scrollview
- 23. Posizione di impostazione Android di scrollview orizzontale
- 24. Layout relativo in ScrollView
- 25. Android: rilevare quando ScrollView tocca il fondo
- 26. React Native Android: come rimuovere "effetto overscroll" di ScrollView
- 27. Reset scroll in ScrollView
- 28. Più webview in ScrollView che danno problemi (Android)
- 29. Rimuovere scrollbar da ScrollView a livello di codice in Android
- 30. Imposta l'altezza del Viewpager all'interno di Scrollview in Android
Android 2.2 è il livello di API 8 - vuoi dire 2.1? – Izkata
Commento valido: deve avere letto "API livello 9"; Ho modificato di conseguenza –