
これを表示しないようにするには、View.setOverScrollMode()で、OVER_SCROLL_NEVERを指定します。(デフォルトでは、OVER_SCROLL_ALWAYSになっています。)
- listView.setOverScrollMode(View.OVER_SCROLL_NEVER);
setOverScrollMode()はAPI Level 9からなので、ViewPagerをAPI Level 9未満でも使う場合は、ViewCompat.setOverScrollMode()を使います。
- ViewCompat.setOverScrollMode(viewPager, ViewCompat.OVER_SCROLL_NEVER);
-------
解説
端のエフェクトはEdgeEffect(http://tools.oesf.biz/android-4.4.2_r1.0/xref/frameworks/base/core/java/android/widget/EdgeEffect.java)というクラスが担っています。
AbsListViewでは、OVER_SCROLL_NEVERが指定されると、EdgeEffect用の変数にnullを指定するようになっています。
http://tools.oesf.biz/android-4.4.2_r1.0/xref/frameworks/base/core/java/android/widget/AbsListView.java#840
- 840 @Override
- 841 public void setOverScrollMode(int mode) {
- 842 if (mode != OVER_SCROLL_NEVER) {
- 843 if (mEdgeGlowTop == null) {
- 844 Context context = getContext();
- 845 mEdgeGlowTop = new EdgeEffect(context);
- 846 mEdgeGlowBottom = new EdgeEffect(context);
- 847 }
- 848 } else {
- 849 mEdgeGlowTop = null;
- 850 mEdgeGlowBottom = null;
- 851 }
- 852 super.setOverScrollMode(mode);
- 853 }
ViewPagerでは、描画時にOverScrollModeを取得して、OVER_SCROLL_NEVERの場合はエフェクトを描画しないようになっています。
http://tools.oesf.biz/android-4.4.2_r1.0/xref/frameworks/support/v4/java/android/support/v4/view/ViewPager.java#2169
- 2169 @Override
- 2170 public void draw(Canvas canvas) {
- 2171 super.draw(canvas);
- 2172 boolean needsInvalidate = false;
- 2173
- 2174 final int overScrollMode = ViewCompat.getOverScrollMode(this);
- 2175 if (overScrollMode == ViewCompat.OVER_SCROLL_ALWAYS ||
- 2176 (overScrollMode == ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS &&
- 2177 mAdapter != null && mAdapter.getCount() > 1)) {
- 2178 if (!mLeftEdge.isFinished()) {
- 2179 final int restoreCount = canvas.save();
- 2180 final int height = getHeight() - getPaddingTop() - getPaddingBottom();
- 2181 final int width = getWidth();
- 2182
- 2183 canvas.rotate(270);
- 2184 canvas.translate(-height + getPaddingTop(), mFirstOffset * width);
- 2185 mLeftEdge.setSize(height, width);
- 2186 needsInvalidate |= mLeftEdge.draw(canvas);
- 2187 canvas.restoreToCount(restoreCount);
- 2188 }
- 2189 if (!mRightEdge.isFinished()) {
- 2190 final int restoreCount = canvas.save();
- 2191 final int width = getWidth();
- 2192 final int height = getHeight() - getPaddingTop() - getPaddingBottom();
- 2193
- 2194 canvas.rotate(90);
- 2195 canvas.translate(-getPaddingTop(), -(mLastOffset + 1) * width);
- 2196 mRightEdge.setSize(height, width);
- 2197 needsInvalidate |= mRightEdge.draw(canvas);
- 2198 canvas.restoreToCount(restoreCount);
- 2199 }
- 2200 } else {
- 2201 mLeftEdge.finish();
- 2202 mRightEdge.finish();
- 2203 }
- 2204
- 2205 if (needsInvalidate) {
- 2206 // Keep animating
- 2207 ViewCompat.postInvalidateOnAnimation(this);
- 2208 }
- 2209 }
0 件のコメント:
コメントを投稿