Android實現(xiàn)快速滾動FastScrollView效果
先看效果圖:
public class FastScrollView extends ScrollView { private Rect mBarRect = new Rect(); private int mScrollExWidth; private int mScrollExHeight; private boolean mScrollStart; private int dx, dy; private int mRightPadding; public FastScrollView(Context context) { super(context); init(); } public FastScrollView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public FastScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { mScrollExWidth = dip2px(16); //擴展拖動區(qū)域?qū)挾龋勺孕行薷? mScrollExHeight = dip2px(50); //擴展拖動區(qū)域高度,可自行修改 } @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction() & ev.getActionMasked()) { case MotionEvent.ACTION_DOWN: //Log.e("fly", "down"); mScrollStart = false; if (canScroll()) { dx = (int) ev.getX(); dy = (int) ev.getY(); float scrollPos = (float) getHeight() / getChildView().getHeight(); int barHeight = (int) (scrollPos * getHeight()); //Log.e("fly", scrollPos+", "+ barHeight); mBarRect.left = getWidth() - mRightPadding - getVerticalScrollbarWidth(); mBarRect.right = getWidth() - mRightPadding; mBarRect.top = (int) (getScrollY() * scrollPos); mBarRect.bottom = mBarRect.top + barHeight; //Dbg.print(mBarRect.left, mBarRect.right, mBarRect.top, mBarRect.bottom, dx, dy); if (dx >= mBarRect.left - mScrollExWidth && dx < mBarRect.right && dy >= mBarRect.top - mScrollExHeight && dy < mBarRect.bottom + mScrollExHeight) { //Log.e("fly", "mScrollStart"); mScrollStart = true; } } break; case MotionEvent.ACTION_MOVE: if (mScrollStart) { int offsetY = (int) ev.getY() - dy; //Log.e("fly", "move: " + ev.getY()); int top = mBarRect.top + offsetY; float scrollPos = (float) top / getHeight(); int scrollY = (int) (scrollPos * getChildView().getHeight()); if (scrollY < 0) { scrollY = 0; } if (scrollY > getChildView().getHeight() - getHeight()) { scrollY = getChildView().getHeight() - getHeight(); } setScrollY(scrollY); return true; } break; } return super.dispatchTouchEvent(ev); } private boolean canScroll() { View child = getChildView(); if (child != null && child.getHeight() > getHeight()) { return true; } else { return false; } } private View getChildView() { if (getChildCount() > 0) { return getChildAt(0); } else { return null; } } private int dip2px(float dpValue) { final float scale = getContext().getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * 這里不用view的paddding,用于預(yù)留特殊空隙 * * @param mRightPadding */ public void setRightPadding(int mRightPadding) { this.mRightPadding = mRightPadding; } }
布局中設(shè)置了大滾動條樣式,滾動時更加明顯:
<com.zwxuf.apkparserdemo.FastScrollView android:id="@+id/mScrollView" android:layout_width="0dp" android:layout_weight="1" android:scrollbarSize="10dp" android:paddingRight="10dp" android:scrollbarThumbVertical="@drawable/fast_scroll_thumb_drawable" android:layout_height="match_parent"> <HorizontalScrollView android:layout_width="match_parent" android:layout_height="match_parent" > <EditText android:id="@+id/et_xml" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:editable="false" android:textColor="#000000" android:textSize="10sp" android:typeface="monospace"/> </HorizontalScrollView> </com.zwxuf.apkparserdemo.FastScrollView>
同理,可以依此制作快速滾動的 HorizontalScrollView。
到此這篇關(guān)于Android實現(xiàn)快速滾動FastScrollView的文章就介紹到這了,更多相關(guān)android滾動FastScrollView內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android notifyDataSetChanged() 動態(tài)更新ListView案例詳解
- 解決java.lang.NoClassDefFoundError: android.support.v4.animation.AnimatorCompatHelper問題
- AndroidStudio報錯Emulator:PANIC:Cannot find AVD system path. Please define ANDROID_SDK_ROOT(解決方案)
- 在Android項目中使用AspectJ的詳細攻詻
- 捕獲與解析Android NativeCrash
- Android AS創(chuàng)建自定義布局案例詳解
相關(guān)文章
Android實現(xiàn)ImageView陰影和圖層效果
這篇文章主要為大家詳細介紹了Android實現(xiàn)ImageView陰影和圖層效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02Android開發(fā)中一個簡單實用的調(diào)試應(yīng)用技巧分享
這篇文章主要跟大家分享了一個簡單實用的Android調(diào)試應(yīng)用技巧,文中介紹的非常詳細,相信對大家具有一定的參考學(xué)習(xí)價值,需要的朋友下面來一起看看吧。2017-05-05AndroidStudio修改Code Style來格式化自定義標(biāo)簽的xml文件方式
這篇文章主要介紹了AndroidStudio修改Code Style來格式化自定義標(biāo)簽的xml文件方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android HorizontalScrollView滑動與ViewPager切換案例詳解
這篇文章主要介紹了Android HorizontalScrollView滑動與ViewPager切換案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08