Skip to content

skydoves/DoubleLift

Repository files navigation

DoubleLift

License API Build Status Build Status Javadoc

πŸ¦‹ Expands and collapses a layout horizontally and vertically sequentially.
Inspired by "Viewing Labels" from the Trello.

Including in your project

Maven Central Jitpack

Gradle

Add below codes to your root build.gradle file (not your module build.gradle file).

allprojects {
    repositories {
        mavenCentral()
    }
}

And add a dependency code to your module's build.gradle file.

dependencies {
    implementation "com.github.skydoves:doublelift:1.0.4"
}

Usage

Add following XML namespace inside your XML layout file.

xmlns:app="http://schemas.android.com/apk/res-auto"

DoubleLiftLayout

Here is a basic example of implementing DoubleLiftLayout.

<com.skydoves.doublelift.DoubleLiftLayout
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:doubleLift_foldedWidth="50dp" // sets the width size when collapsed.
  app:doubleLift_foldedHeight="10dp" // sets the height size when collapsed.
  app:doubleLift_horizontalDuration="400" // sets the duration of horizontal lifting.
  app:doubleLift_verticalDuration="300" // sets the duration of vertical lifting.
  app:doubleLift_cornerRadius="4dp" // sets the corner radius.
  app:doubleLift_autoExpand="false" // expand initially or not.
  app:doubleLift_startOrientation="horizontal"
  app:doubleLift_animation="bounce" // sets the lifting animation when expanding and collapsing
  >

  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="Feature"
    android:textColor="@color/white_87"
    android:textStyle="bold" />
    
  // something complicated views or layouts
  
</com.skydoves.doublelift.DoubleLiftLayout>

Create using builder class

We can create an instance of DoubleLiftLayout using the DoubleLiftLayout.Builder class.

Java

DoubleLiftLayout doubleLiftLayout = new DoubleLiftLayout.Builder(context)
    .setFoldedWidth(200)
    .setFoldedHeight(100)
    .setCornerRadius(6)
    .setLiftHorizontalDuration(400)
    .setLiftVerticalDuration(200)
    .setOnExpandListener(new OnExpandListener() {
      @Override public void onExpand(boolean isExpanded) {
        toast("expanded: " + isExpanded);
      }
    }).build();

Kotlin

val myDoubleLiftLayout = DoubleLiftLayout.Builder(context)
  .setFoldedWidth(200)
  .setFoldedHeight(100)
  .setCornerRadius(6)
  .setLiftHorizontalDuration(400)
  .setLiftVerticalDuration(200)
  .setOnExpandListener { toast("expanded: $it") }
  .build()

Or we can create using the kotlin-dsl.

val myDoubleLiftLayout = doubleLiftLayout(this) {
  setFoldedWidth(200)
  setFoldedHeight(100)
  setCornerRadius(6)
  setLiftHorizontalDuration(400)
  setLiftVerticalDuration(200)
  setOnExpandListener { toast("expanded: $it") }
}

Expand and Collapse

We can expand and collapse using the below methods.

doubleLiftLayout.expand(); // expand the width and height size sequentially.
doubleLiftLayout.collapse(); // collapse the width and height size sequentially.

or we can do something after expanded using lambda in Kotlin.

doubleLiftLayout.expand { toast("expanded!") }
doubleLiftLayout.collapse { toast("collapsed!") }

OnExpandListener

We can listen to the DoubleLiftLayout is expanded or collapsed.

Java

.setOnExpandListener(new OnExpandListener() {
  @Override public void onExpand(boolean isExpanded) {
    toast("expanded: " + isExpanded);
  }
}

Kotlin

doubleLiftLayout.onExpandListener = object : OnExpandListener {
  override fun onExpand(isExpanded: Boolean) {
    toast("Expanded : $it")
  }
}

// or we can listen using a lambda expression.
doubleLiftLayout.setOnExpandListener {
  if (it) {
    toast("expanded")
  } else {
    toast("collapse")
  }
}

LiftAnimation

We can customize the expanding and collapsing animation.

LiftAnimation.NORMAL
LiftAnimation.ACCELERATE
LiftAnimation.BOUNCE
NORMAL ACCELERATE BOUNCE

DoubleLiftLayout Attributes

Attributes Type Default Description
foldedWidth Dimension 0 sets the width size when collapsed.
foldedHeight Dimension 0 ets the height size when collapsed.
horizontalDuration Long 500L sets the duration of horizontal lifting.
verticalDuration Long 300L sets the duration of vertical lifting.
cornerRadius Dimension 4dp sets the corner radius.
autoExpand Boolean false invkoe expand() method initially or not.
startOrientation LiftStartOrientation LiftStartOrientation.HORIZONTAL sets the starting orientation of the lifting.
animation LiftAnimation LiftAnimation.NORMAL sets the lifting animation when expanding and collapsing

Find this library useful? ❀️

Support it by joining stargazers for this repository. ⭐
And follow me for my next creations! 🀩

License

Copyright 2019 skydoves (Jaewoong Eum)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.