Giter VIP home page Giter VIP logo

Comments (8)

crearo avatar crearo commented on July 19, 2024 7

I've identified where it needs to be fixed, and why it isn't all that easy to fix.
In the DiscreteScrollLayoutManager there are two variables, private int childHalfWidth, childHalfHeight;. These are used in initChildDimensions to measure and set the values. Various other methods then use these (constant) cached values to perform the LayoutManager logic.

So, what I tried doing was in place of using these fixed ones, I created a hashmap like so private HashMap<Integer, Point> childDimensions;, and a helper function to measure and cache these values.

    private Point getChildDimension(RecyclerView.Recycler recycler, int position) {
        if (childDimensions.containsKey(position)) return childDimensions.get(position);
        View viewToMeasure = recycler.getViewForPosition(position);
        measureChildWithMargins(viewToMeasure, 0, 0);

        int childViewWidth = getDecoratedMeasuredWidth(viewToMeasure) / 2;
        int childViewHeight = getDecoratedMeasuredHeight(viewToMeasure) / 2;
        Point dimension = new Point(childViewWidth, childViewHeight);
        childDimensions.put(position, dimension);
        return dimension;
    }

Sadly, this doesn't work. The offsets are still messed up and the continuous measurements (even though cached) slow down the app greatly.

Since the library developer is more versed in the LayoutManager logic, I'm certain this wouldn't be too difficult a task for them. Highly suggest this is looked into asap!

from discretescrollview.

Amealky avatar Amealky commented on July 19, 2024 3

@yarolegovich any updates ? because this is a very painfull problem I think

from discretescrollview.

karanatwal avatar karanatwal commented on July 19, 2024

Hi @crearo sadly i am so much disapointed with this library .. after wasting whole my day now i saw your issue reported ...now i have very less time to deliver project and i can't even fix ths issue by myself in less time ...do you know any other library with same functionality ,,help would be really apreciated

from discretescrollview.

yarolegovich avatar yarolegovich commented on July 19, 2024

The main problem here is that we should somehow measure all views and cache their dimensions, and then use the data to calculate scroll distance.
The majority of code which does layout should also be rewritten.
Unfortunately it's very hard for me to find time for these changes.

from discretescrollview.

bailandi avatar bailandi commented on July 19, 2024

You can change code like this, which makes the result of the measurement the largest of all Items, but it still doesn't solve the fixed width or height problem.

 private void initChildDimensions(RecyclerView.Recycler recycler) {
        int itemCount = getItemCount();
        int childViewWidth = 0;
        int childViewHeight = 0;
        View firstView = null;
        for (int i = 0; i < itemCount; i++) {
            View viewToMeasure = recycler.getViewForPosition(i);
            if (i == 0) {
                addView(viewToMeasure);
                firstView = viewToMeasure;
            }
            measureChildWithMargins(viewToMeasure, 0, 0);

            childViewHeight = Math.max(getDecoratedMeasuredHeight(viewToMeasure), childViewHeight);
            childViewWidth = Math.max(getDecoratedMeasuredWidth(viewToMeasure), childViewWidth);
        }

        childHalfWidth = childViewWidth / 2;
        childHalfHeight = childViewHeight / 2;

        scrollToChangeCurrent = orientationHelper.getDistanceToChangeCurrent(
                childViewWidth,
                childViewHeight);

        extraLayoutSpace = scrollToChangeCurrent * offscreenItems;

        detachAndScrapView(firstView, recycler);
    }

from discretescrollview.

BejanAlina avatar BejanAlina commented on July 19, 2024

@yarolegovich is this issue still not fixed ? It seems that the width and height of all items are stilll dependent on the first item size

from discretescrollview.

india2sarthak avatar india2sarthak commented on July 19, 2024

@yarolegovich Any updates on this? The library works great. However, not being able to set the height and width of the individual items is a huge turn-off

from discretescrollview.

javalue avatar javalue commented on July 19, 2024

try to set different holder, and background be transparent. but when horizontal scroll, you only change item's height, and verizontal, you only change item's width. If you want both change w/h, now it's hard.

from discretescrollview.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.