自定義滾動LinearLayout(垂直)

2021-08-03 11:55:50 字數 2591 閱讀 9711

1. 宣告

第一次寫部落格好緊張呀!

最近在發現寫linearlayout好多頁面乙個手機上剛剛好滿屏,換乙個手機就回出現底部有一部分布局看不到完整布局,第乙個想到就是在外面套一層scrollview, 一下子就解決問題,但是每次都要套一層布局感覺麻煩了,而且套一層布局,如果布局有顏色或者半透明的話,那麼在填充布局到介面上時就會多繪畫乙個層, 所以最近重寫乙個垂直方向自帶滾動效果的linearlayout,暫時只支援垂直方向的滾動效果哦。

2. 開工

廢話不說了直接上**:

public class scrolllinearlayout extends linearlayout implements gesturedetector.ongesturelistener

public scrolllinearlayout(context context, @nullable attributeset attrs)

public scrolllinearlayout(context context, @nullable attributeset attrs, int defstyleattr)

@targetapi(build.version_codes.lollipop)

public scrolllinearlayout(context context, attributeset attrs, int defstyleattr, int defstyleres)

private void init(context context)

@override

protected void onlayout(boolean changed, int l, int t, int r, int b)

}private float mymove;

private float mylastmove;

@override

public boolean onintercepttouchevent(motionevent ev)

return super.onintercepttouchevent(ev);

}@override

public boolean dispatchtouchevent(motionevent event)

mvelocitytracker.addmovement(event);

switch (event.getaction())

mymove = event.gety();

mylastmove = mymove;

break;

case motionevent.action_move:

mymove = event.gety();

int scrolledy = (int) (mylastmove - mymove);

if (scrolledy < 0 && getscrolly() + scrolledy < 0)

if (scrolledy > 0 && getscrolly() + scrolledy > mscrollrange)

if (mscrollrange > 0)

mylastmove = mymove;

break;

case motionevent.action_up:

case motionevent.action_cancel:

if (mvelocitytracker != null && mscrollrange > 0)

releasevelocitytracker();

break;

}return super.dispatchtouchevent(event);

}/**

* mvelocitytracker**

*/private void releasevelocitytracker()

}@override

public void computescroll()

}@override

public boolean ondown(motionevent e)

@override

public void onshowpress(motionevent e)

@override

public boolean onsingletapup(motionevent e)

@override

public boolean onscroll(motionevent e1, motionevent e2, float distancex, float distancey)

@override

public void onlongpress(motionevent e)

@override

public boolean onfling(motionevent e1, motionevent e2, float velocityx, float velocityy) }

3.使用

直接在布局檔案裡面當成自定義布局使用即可,簡單方便。

4.補充

自定義滾動軸

webkit 這個是谷歌瀏覽器的字首,自定義滾動軸只有谷歌瀏覽器支援。webkit scrollbar 滾動軸整體 webkit scrollbar thumb 滑塊 webkit scrollbar track 滑動軌道 webkit scrollbar button 兩端按鈕 webkit sc...

自定義滾動導航控制項

2015 04 25 更新控制左邊距,水平間距,固定title寬屬性,增加非相鄰頻道切換不需要動畫方式。之前囤了不少自定義的控制項,都準備放上來的,但是太懶了.最近發現有需要的時候卻死活找不著了,所以決定開始整理整理,挨個放上來,既幫助了有需要的人也方便了自己.滾動導航檢視 效果圖 覺得不錯請點一下...

自定義滾動條

滾動條從外觀來看是由兩部分組成 1.滑塊 可以滑動的部分 2.軌道 即滑塊的軌道,一般來說滑塊的顏色比軌道的顏色深。滾動條的css樣式主要有三部分組成 1 webkit scrollbar 定義了滾動條整體的樣式 可以改變滾動條的寬度 2 webkit scrollbar thumb 滑塊部分 可以...