seekBar的的范圍有限叉寂,有時候設計師要求高度為4dp潘鲫,此時范圍太小翁逞,很難滑動成功。因此溉仑,我們需要在不改變 UI 的前提下挖函,增加點擊和滑動范圍。
直接上代碼:
public class MainActivity extends AppCompatActivity {
/**
* 增加seekBar滑動范圍
*/
private final static int SEEK_SCOPE = 200;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
final SeekBar seekBar = findViewById(R.id.seekbar);
// seekBar的父布局
FrameLayout flParent = findViewById(R.id.fl_parent);
flParent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Rect seekBarRect = new Rect();
// 獲取相對于父view的位置
seekBar.getHitRect(seekBarRect);
// 上下擴大了指定的接收范圍
if (event.getY() >= seekBarRect.top - SEEK_SCOPE
&& event.getY() <= seekBarRect.bottom + SEEK_SCOPE
&& event.getX() >= seekBarRect.left
&& event.getX() <= seekBarRect.right) {
// 模擬seekBar事件
MotionEvent obtain = MotionEvent.obtain(event.getDownTime(),
event.getEventTime(), event.getAction(),
event.getX() - seekBarRect.left,
seekBarRect.top + seekBarRect.height() / 2.0F,
event.getMetaState());
return seekBar.onTouchEvent(obtain);
}
return false;
}
});
}
}