mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-28 15:56:49 +00:00
Tweaking fast scroller to follow touch closer.
- Issue: The fast scroller currently does not follow the touch input because fundamentally, the fixed scrollbar height and the mapping of the scroll space to the scrollbar space is fundamentally incompatible. - This CL changes the fast scroller to allow it to detach when the user fast-scrolls, then re-attaches after the user scrolls the screen and the current scroll position for the scrollbar picks up the thumb position. - Since the scroll position and the fast scroller thumb is now detached, we can change the distribution of the fast scroll letters to make it independent of the rows for each section and instead uniformly distribute it along the scrollbar, which allows for more stability. - There are edge cases where this fails, especially when there are few apps, which we can investigate further. Bug: 20035978 Change-Id: I8322f862107e6f330deff692885233706564bffd
This commit is contained in:
@@ -102,7 +102,7 @@ public class WidgetsRecyclerView extends BaseRecyclerView {
|
||||
|
||||
getCurScrollState(mScrollPosState);
|
||||
float pos = rowCount * touchFraction;
|
||||
int availableScrollHeight = getAvailableScrollHeight(rowCount, mScrollPosState.rowHeight, 0);
|
||||
int availableScrollHeight = getAvailableScrollHeight(rowCount, mScrollPosState.rowHeight);
|
||||
LinearLayoutManager layoutManager = ((LinearLayoutManager) getLayoutManager());
|
||||
layoutManager.scrollToPositionWithOffset(0, (int) -(availableScrollHeight * touchFraction));
|
||||
|
||||
@@ -115,29 +115,29 @@ public class WidgetsRecyclerView extends BaseRecyclerView {
|
||||
* Updates the bounds for the scrollbar.
|
||||
*/
|
||||
@Override
|
||||
public void onUpdateScrollbar() {
|
||||
public void onUpdateScrollbar(int dy) {
|
||||
int rowCount = mWidgets.getPackageSize();
|
||||
|
||||
// Skip early if, there are no items.
|
||||
if (rowCount == 0) {
|
||||
mScrollbar.setScrollbarThumbOffset(-1, -1);
|
||||
mScrollbar.setThumbOffset(-1, -1);
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip early if, there no child laid out in the container.
|
||||
getCurScrollState(mScrollPosState);
|
||||
if (mScrollPosState.rowIndex < 0) {
|
||||
mScrollbar.setScrollbarThumbOffset(-1, -1);
|
||||
mScrollbar.setThumbOffset(-1, -1);
|
||||
return;
|
||||
}
|
||||
|
||||
synchronizeScrollBarThumbOffsetToViewScroll(mScrollPosState, rowCount, 0);
|
||||
synchronizeScrollBarThumbOffsetToViewScroll(mScrollPosState, rowCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current scroll state.
|
||||
*/
|
||||
private void getCurScrollState(ScrollPositionState stateOut) {
|
||||
protected void getCurScrollState(ScrollPositionState stateOut) {
|
||||
stateOut.rowIndex = -1;
|
||||
stateOut.rowTopOffset = -1;
|
||||
stateOut.rowHeight = -1;
|
||||
|
||||
Reference in New Issue
Block a user