Skip to content

Impossible to reorder/insert new layers at runtime #25

Open
@jacobtabak

Description

@jacobtabak

It seems that the current API of this library makes it impossible to reorder the layers (or insert new layers) to ParallaxLayerLayout at runtime.

For example, consider this XML pseudocode:

<ParallaxLayerLayout>
  <ImageView/>
  <ImageView/>
</ParallaxLayerLayout>

I want to insert another view at index 0, 1, or 2, depending on how the layers are ordered.

val layerIndex = data.layerIndex
parallaxLayerLayout.addChild(myView, layerIndex)

The newly added layer will not have any parallax effect.

This is because ParallaxLayerLayout.computeOffsets is only called once after inflate - and it is a private method. Since the view has already been inflated, the offsets are never computed for the newly added layer, and it has no parallax effect.

Workaround:
Use reflection to call ParallaxLayerLayout.computeOffsets() after adding the new view.

Proposed permanent fixes:

  • ParallaxLayerLayout.LayoutParams.customIndex should be public - if this field can be modified via XML, there should be no reason not to allow it to be modified programmatically.
  • Override addChild methods to automatically update the layout params of all the other children to allow seamless, automatic insertion of new layers.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions