Jak utworzyć widok przewijania bounce w Androidzie jak iPhone?Jak utworzyć rzutnik bouncable w systemie Android?
Odpowiedz
To się nazywa przeszukiwanie w systemie Android.
Zobacz http://developer.android.com/reference/android/widget/OverScroller.html i (na przykład) http://developer.android.com/reference/android/widget/ListView.html#setOverscrollFooter(android.graphics.drawable.Drawable)
Jest ona dostępna tylko z poziomu API 9 kolejnych.
Jednakże urządzenia Samsung wydaje się dalekie przewinięcie obsługują natywnie w systemie Android 2.2
dodać efekt bounce do Scrollview w android
Krok 1: Tworzenie nowego pliku BounceScrollView w opakowaniu 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);
}
}
Krok 2: W układzie należy zmienić
<ScrollView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
do
<com.base.view.BounceScrollView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Cześć, dzięki za rozwiązanie, działa doskonale dla mnie. Proszę zaktualizować swój kod, masz mały błąd: initBounceListView() powinien być initBounceScrollView();) –
Dziękuję za rozwiązanie, działa idealnie. – ACengiz
ten jest super !!!! dziękuję! –
mam ulepszoną wersję tej odpowiedzi: https://stackoverflow.com/a/13391248/3256989. Więc moja wersja jest (przykład dla 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);
}
}
Wystarczy użyć 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. Jak programowo utworzyć menu w systemie Android?
- 2. Jak utworzyć gniazdo Raw w systemie Android?
- 3. Jak utworzyć blokadę (concurrent.locks.Lock) w systemie Android?
- 4. Jak dynamicznie utworzyć przycisk w systemie Android?
- 5. Jak utworzyć pionową karuzelę w systemie Android?
- 6. Jak utworzyć utytułowaną granicę w systemie Android?
- 7. Jak utworzyć aplikację TextArea w systemie Android?
- 8. Jak utworzyć przezroczystą aktywność w systemie Android?
- 9. Jak utworzyć niestandardowe powiązanie danych w systemie Android? (Android studio)
- 10. Jak utworzyć ekran suwaka (jak w Tweetdeck) w systemie Android?
- 11. Jak utworzyć menu rozwijane w szufladzie nawigacji (w systemie Android)?
- 12. Jak utworzyć emulator Samsung Galaxy Note w systemie Android AVD?
- 13. Jak utworzyć zgrabny formularz wprowadzania dwóch kolumn w systemie Android?
- 14. Jak utworzyć podmenu za pomocą przycisków radiowych w systemie Android?
- 15. Jak utworzyć niestandardową wersję internetową w systemie Android?
- 16. Jak mogę dynamicznie utworzyć przycisk w systemie Android?
- 17. Jak utworzyć przycisk udostępniania na Twitterze w systemie Android?
- 18. Jak utworzyć widok popover w systemie Android, np. Na Facebooku?
- 19. Jak utworzyć dynamiczną tabelę danych w systemie Android?
- 20. Jak utworzyć półprzezroczystą szarą nakładkę samouczka w systemie Android?
- 21. Jak programowo utworzyć nowy arkusz kalkulacyjny w systemie Android/Java?
- 22. Jak utworzyć uniksowy znacznik czasu w systemie Android?
- 23. Jak mogę utworzyć miniaturkę URL-a wideo w systemie Android?
- 24. Jak utworzyć ListView z przerywanymi liniami przerywanymi w systemie Android?
- 25. Jak utworzyć niestandardowy układ powiadomień w systemie Android?
- 26. Jak utworzyć animację układu slajdów w systemie Android?
- 27. Jak przetestować zakup aplikacji w systemie Android?
- 28. Jak odtwarzać utwór w systemie Android - phonegap
- 29. Jak włączyć blokadę orientacji w systemie Android?
- 30. oddzwonienie w systemie Android?
Android 2.2 jest poziom API 8 - nie oznacza to 2.1? – Izkata
Ważna uwaga: powinna być przeczytana "Poziom API 9"; Odpowiednio edytowałem –