如何在iPhone中創建像iPhone一樣的反彈滾動視圖?如何在android中創建bouncable滾動視圖?
回答
它在Android中被稱爲overscroll。
見http://developer.android.com/reference/android/widget/OverScroller.html和 (例如)http://developer.android.com/reference/android/widget/ListView.html#setOverscrollFooter(android.graphics.drawable.Drawable)
它只能從API級別9起。
不過,三星的設備似乎要反彈時原生支持Android 2.2的
添加效果反彈中滾動型機器人
步驟1:在包com.base.view創建新文件BounceScrollView
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);
}
}
第2步:在你的佈局,請改變
<ScrollView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
到
<com.base.view.BounceScrollView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
嗨,謝謝你的解決方案,對我很好。請更新你的代碼,你有一個小錯誤:initBounceListView()應該是initBounceScrollView();) –
謝謝你的解決方案,它的作品完美。 – ACengiz
這個 是 太棒了! 謝謝! –
我提高了這個答案的版本:https://stackoverflow.com/a/13391248/3256989。 所以我的版本(例如對於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);
}
}
只需使用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中創建一個帶有標題的bouncable滾動視圖?
- 2. Android - 使用LinearLayout創建滾動視圖
- 3. 在Android中動態創建滾動視圖使用活動
- 4. 創建滾動視圖
- 5. 當創建滾動視圖
- 6. 創建動態視圖,而像在Instagram中滾動視圖
- 7. 在Android中滾動視圖
- 8. 在android中滾動視圖
- 9. 如何創建無限可滾動和可縮放視圖android?
- 10. 如何在android中創建視圖?
- 11. 如何在Android中創建視圖?
- 12. 如何在Android中創建樹視圖?
- 13. 如何在Android中創建視圖?
- 14. Android - 如何自動創建視圖?
- 15. 如何在IOS中創建嵌套滾動視圖字段
- 16. 如何在水平滾動視圖中創建延遲加載
- 17. 滾動視圖內滾動視圖android
- 18. android-如何把滾動視圖下滾動視圖
- 19. 在android中創建動態視圖?
- 20. 如何在Android中創建彈出的單選按鈕滾動視圖?
- 21. 如何在android佈局中創建全屏可滾動圖庫?
- 22. 在滾動視圖中創建1000個視圖需要時間
- 23. Android,如何獲得recycleView的高度在創建子視圖之前,創建子視圖Holders刪除滾動
- 24. Appium - 如何在Android滾動視圖中獲取所有視圖
- 25. 如何在Android中滾動視圖時查看視圖?
- 26. 如何在活動中創建視圖?
- 27. TextView在滾動視圖不滾動 - Android
- 28. 滾動視圖的子視圖如何知道滾動視圖正在滾動
- 29. Android滾動視圖
- 30. Android滾動視圖
的Android 2.2是API級別8 - 你的意思是2.1? – Izkata
有效評論:應該閱讀「API級別9」;我已經編輯了相應的 –