dennis-sheil / android-spreadsheet

A basic spreadsheet for Android
GNU General Public License v2.0
40 stars 20 forks source link

Limit scrolling coordinates #5

Open achatina opened 4 years ago

achatina commented 4 years ago

Have a question. How I can limit list by columns and rows? E.g. I have a sheet 100x100 and I want to show only 100 rows and 100 columns and stop scrolling after reaching this limits

achatina commented 4 years ago

Not the best solution, but it seems to work:

class SheetLayoutManager(
        private val columnSize: Int = 0,
        private val rowSize: Int = 0
)
private fun handleScroll(d: Int, recycler: RecyclerView.Recycler?, tilt: Tilt): Int {

        var dd: Int

        val direction: Direction = if (d < 0) Direction.LIMITED else Direction.UNLIMITED

        if (direction == Direction.LIMITED) {
            dd = d * -1
            do {
                dd = processLimitedScroll(dd, recycler, tilt)
                scrapOffscreenViews(recycler, direction, tilt)
            } while (dd > 0 && ((topRow > 1 && tilt == Tilt.VERTICAL) || (leftColumn > 1 && tilt == Tilt.HORIZONTAL)))
        } else {
            dd = d
            if (getSideCount(Side.ROWS) + topRow > rowSize && tilt == Tilt.VERTICAL)
                return 0
            if (getSideCount(Side.COLUMNS) + leftColumn > columnSize && tilt == Tilt.HORIZONTAL)
                return 0
            do {
                if (getSideCount(Side.ROWS) + topRow > rowSize && tilt == Tilt.VERTICAL)
                    return d - dd
                if (getSideCount(Side.COLUMNS) + leftColumn > columnSize && tilt == Tilt.HORIZONTAL)
                    return d - dd
                dd = processUnlimitedScroll(dd, recycler, tilt)
                scrapOffscreenViews(recycler, direction, tilt)
            } while (dd > 0)
        }
        return d
    }

It has a lot of bugs, but works +- fine. Anyway, I'm looking for a better solution

orcuns commented 4 years ago

Not the best solution, but it seems to work:

class SheetLayoutManager(
        private val columnSize: Int = 0,
        private val rowSize: Int = 0
)
private fun handleScroll(d: Int, recycler: RecyclerView.Recycler?, tilt: Tilt): Int {

        var dd: Int

        val direction: Direction = if (d < 0) Direction.LIMITED else Direction.UNLIMITED

        if (direction == Direction.LIMITED) {
            dd = d * -1
            do {
                dd = processLimitedScroll(dd, recycler, tilt)
                scrapOffscreenViews(recycler, direction, tilt)
            } while (dd > 0 && ((topRow > 1 && tilt == Tilt.VERTICAL) || (leftColumn > 1 && tilt == Tilt.HORIZONTAL)))
        } else {
            dd = d
            if (getSideCount(Side.ROWS) + topRow > rowSize && tilt == Tilt.VERTICAL)
                return 0
            if (getSideCount(Side.COLUMNS) + leftColumn > columnSize && tilt == Tilt.HORIZONTAL)
                return 0
            do {
                if (getSideCount(Side.ROWS) + topRow > rowSize && tilt == Tilt.VERTICAL)
                    return d - dd
                if (getSideCount(Side.COLUMNS) + leftColumn > columnSize && tilt == Tilt.HORIZONTAL)
                    return d - dd
                dd = processUnlimitedScroll(dd, recycler, tilt)
                scrapOffscreenViews(recycler, direction, tilt)
            } while (dd > 0)
        }
        return d
    }

It has a lot of bugs, but works +- fine. Anyway, I'm looking for a better solution

Hey, Could you able to find a better solution?

achatina commented 4 years ago

@orcuns

Hey, Could you able to find a better solution?

Unfortunately - No. I took this lib as a "draft" and implemented my own LayoutManager for my needs, as I understood, that this lib can't cover all functionality I need.