最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實現(xiàn)快速滾動FastScrollView效果

 更新時間:2021年08月17日 10:44:05   作者:遠方235  
這篇文章主要介紹了Android實現(xiàn)快速滾動FastScrollView效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

先看效果圖:

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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android動畫入門教程之kotlin

    Android動畫入門教程之kotlin

    最近在學(xué)習(xí)kotlin,所以下面這篇文章主要給大家介紹了關(guān)于Android動畫入門教程之kotlin的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Android基于widget組件實現(xiàn)物體移動/控件拖動功能示例

    Android基于widget組件實現(xiàn)物體移動/控件拖動功能示例

    這篇文章主要介紹了Android基于widget組件實現(xiàn)物體移動/控件拖動功能,結(jié)合實例形式分析了widget組件在桌面應(yīng)用中的事件響應(yīng)與屬性動態(tài)操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-10-10
  • Android圖片加載利器之Picasso基本用法

    Android圖片加載利器之Picasso基本用法

    這篇文章主要為大家詳細介紹了Android圖片加載利器之Picasso的基本用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Android編程實現(xiàn)獲得內(nèi)存剩余大小與總大小的方法

    Android編程實現(xiàn)獲得內(nèi)存剩余大小與總大小的方法

    這篇文章主要介紹了Android編程實現(xiàn)獲得內(nèi)存剩余大小與總大小的方法,涉及Android基于ActivityManager實現(xiàn)內(nèi)存信息的操作技巧,需要的朋友可以參考下
    2015-12-12
  • Android四大組件之Activity詳解

    Android四大組件之Activity詳解

    今天小編就為大家分享一篇關(guān)于Android四大組件之Activity詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • android studio 清單配置文件androidmainfest.xml詳細解讀

    android studio 清單配置文件androidmainfest.xml詳細解讀

    AndroidManifest官方解釋是應(yīng)用清單,每個應(yīng)用的根目錄中都必須包含一個,并且文件名必須一模一樣,這個文件中包含了APP的配置信息,系統(tǒng)需要根據(jù)里面的內(nèi)容運行APP的代碼,顯示界面,這篇文章介紹了android studio 清單配置文件androidmainfest.xml解讀,需要的朋友可以參考下
    2024-04-04
  • Android中Service的全面總結(jié)

    Android中Service的全面總結(jié)

    這篇文章主要全面總結(jié)了Android中Service的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 如何使用Flutter實現(xiàn)手寫簽名效果

    如何使用Flutter實現(xiàn)手寫簽名效果

    Flutter插件提供了用于繪制平滑簽名的簽名板,下面這篇文章主要給大家介紹了關(guān)于如何使用Flutter實現(xiàn)手寫簽名效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • android遞歸壓縮上傳多張圖片到七牛的實例代碼

    android遞歸壓縮上傳多張圖片到七牛的實例代碼

    本篇文章主要介紹了android遞歸壓縮上傳多張圖片到七牛的實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • RecyclerView實現(xiàn)列表倒計時

    RecyclerView實現(xiàn)列表倒計時

    這篇文章主要為大家詳細介紹了RecyclerView實現(xiàn)列表倒計時,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評論

彩票| 长武县| 慈利县| 廉江市| 牟定县| 安西县| 绥宁县| 葫芦岛市| 沈丘县| 仁寿县| 昌宁县| 廊坊市| 浦江县| 江阴市| 车致| 临西县| 龙泉市| 宣武区| 清河县| 柳林县| 蒙自县| 彰化县| 黎平县| 邵阳市| 绥芬河市| 微山县| 德兴市| 芮城县| 吴旗县| 鹤壁市| 苗栗市| 清丰县| 廊坊市| 濮阳县| 留坝县| 舒城县| 南岸区| 芜湖市| 伊川县| 白河县| 清流县|