/shadowlib

Library for colored, customizable shadows on Android

Primary LanguageKotlinApache License 2.0Apache-2.0

shadowlib

Library for colored, customizable, easy to use shadows on Android

This library is based on https://github.com/Devlight/ShadowLayout

Differences:

  • ported to kotlin
  • parameter names changed (similar to CSS)
  • removed angle parameter to give flexiblity of setting dx, dy
  • added ViewPump interceptor

Setup - without Viewpump

Step 1. Add the JitPack repository to your build file

Add it in your root build.gradle at the end of repositories:

	allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}

Step 2. Add the dependency

	dependencies {
	        implementation 'com.github.maciekczwa:shadowlib:1.0.2'
	}

Setup - with ViewPump

When using ViewPump additional steps are needed.

Add ViewPump to your build.gradle:

implementation 'io.github.inflationx:viewpump:1.0.0'

Library can automatically add ShadowLayout to existing view in hierarchy when you use ViewPump library and set ShadowInterceptor.

Setup ViewPump in Application:

class App : Application() {
    override fun onCreate() {
        super.onCreate()
        ViewPump.init(ViewPump.builder()
                .addInterceptor(ShadowsInterceptor(this))
                .build())
    }
}

Setup ViewPump in Activity:

class MainActivity : AppCompatActivity() {

    override fun attachBaseContext(newBase: Context) {
        super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
    }
}

Usage - without ViewPump

Just add ShadowLayout into your view and set shadow parameters:

       <pl.looksoft.shadowlib.ShadowLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:shadowLayoutBlur="1dp"
            app:shadowLayoutColor="#33FF00FF"
            app:shadowLayoutDx="12dp"
            app:shadowLayoutDy="32dp"
            app:shadowLayoutSpread="-10dp">

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="b4 - layout test"
                app:layout_constraintLeft_toLeftOf="@id/b1"
                app:layout_constraintTop_toBottomOf="@id/b2" />

        </pl.looksoft.shadowlib.ShadowLayout>

Usage - with ViewPump

When using ViewPump you don't need to add ShadowLayout - it will be automatically added during inflation if you set any of shadow parameters on the view.

Be sure not to include namespace in xml parameters.

    <Button
            android:id="@+id/b1"
            shadowLibBlur="5dp"
            shadowLibColor="#FF0000"
            shadowLibDx="10dp"
            shadowLibDy="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="b1 - auto add layout"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

You can also use styles:

       <Button
            android:id="@+id/b8"
            style="@style/ShadowReferenceStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="b8 - reference style test"
            app:layout_constraintLeft_toLeftOf="@id/b1"
            app:layout_constraintTop_toBottomOf="@id/b7" />
   <style name="ShadowReferenceStyle">
        <item name="shadowLibBlur">@dimen/ten_dp</item>
        <item name="shadowLibColor">@color/colorPrimaryDark</item>
        <item name="shadowLibDx">@dimen/ten_dp</item>
        <item name="shadowLibDy">@dimen/ten_dp</item>
        <item name="shadowLibSpread">@dimen/ten_dp</item>
    </style>

Warning kotlin extensions won't work correctly for views which are put into ShadowLayout by injection, because ShadowLayout takes id of original view. Please use Activity.findShadowedView(@IdRes id: Int) or View.findShadowedView(@IdRes id: Int)

Known Problems

  • Kotlin extensions views don't work correctly when using ViewPump injection
  • View will be larger than on preview because of added padding (to show shadow) when using ViewPump incjection