• Stars
    star
    482
  • Rank 91,212 (Top 2 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created almost 10 years ago
  • Updated almost 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Provides 9-patch based drop shadow for view elements. Works on API level 9 or later.

Material Shadow 9-Patch

This library provides 9-patch based drop shadow for view elements. Works on API level 14 or later.

Android Arsenal Maven Central


Example on Android 4.0 Example on Android 5.0


Target platforms

  • API level 14 or later

Latest version

  • Version 1.0.0 (September 25, 2018)

Getting started

This library is published on Maven Central. Just add these lines to build.gradle.

dependencies {
    compile 'com.h6ah4i.android.materialshadowninepatch:materialshadowninepatch:1.0.0'
}

Usage

Layout XML

<com.h6ah4i.android.materialshadowninepatch.MaterialShadowContainerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    style="@style/ms9_DefaultShadowStyle"
    android:id="@+id/shadow_item_container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:ms9_shadowTranslationZ="2dp"
    app:ms9_shadowElevation="4dp">

    <!-- NOTE 1: only 1 child can be accepted -->
    <!-- NOTE 2: margins are required to draw shadow properly -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        android:background="@android:color/white"
        android:text="Inner content view" />

</com.h6ah4i.android.materialshadowninepatch.MaterialShadowContainerView>

Java code

MaterialShadowContainerView shadowView =
        (MaterialShadowContainerView) findViewById(R.id.shadow_item_container);

float density = getResources().getDisplayMetrics().density;

shadowView.setShadowTranslationZ(density * 2.0f); // 2.0 dp
shadowView.setShadowElevation(density * 4.0f); // 4.0 dp

Advanced Usages

<com.h6ah4i.android.materialshadowninepatch.MaterialShadowContainerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    style="@style/ms9_DefaultShadowStyle"
    android:id="@+id/shadow_item_container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:ms9_shadowTranslationZ="2dp"
    app:ms9_shadowElevation="4dp"
    app:ms9_useAmbientShadow="true"
    app:ms9_useSpotShadow="true"
    app:ms9_forceUseCompatShadow="true"
    app:ms9_affectsDisplayedPosition="true"
    app:ms9_spotShadowDrawablesList="@array/ms9_spot_shadow_drawables_z18"
    app:ms9_ambientShadowDrawablesList="@array/ms9_ambient_shadow_drawables_z18">

    ...

</com.h6ah4i.android.materialshadowninepatch.MaterialShadowContainerView>
Property name Default Description
ms9_shadowTranslationZ 0dp Compatibility version of android:translationZ
ms9_shadowElevation 0dp Compatibility version of android:elevation
ms9_forceUseCompatShadow false Enforces to use compatibility shadow on Lollipop or later
ms9_affectsDisplayedPosition true Specify whether the shadow position is affected by the target view's position (emulates Lollipop's behavior)
app:ms9_useAmbientShadow true Specify whether to use ambient shadow
app:ms9_useSpotShadow true Specify whether to use spot shadow
ms9_spotShadowDrawablesList @array/ms9_spot_shadow_drawables Specify Spot shadow (Key shadow) 9-patch resources
ms9_ambientShadowDrawablesList @array/ms9_ambient_shadow_drawables Specify Ambient shadow 9-patch resources
Style name
ms9_DefaultShadowStyle([ Z6 or Z9 orZ18 ]) Default style (uses spot & ambient shadow, position affects)
ms9_DefaultShadowStyle([ Z6 or Z9 or Z18 ])CompatOnly Default style with ms9_forceUseCompatShadow="true"
ms9_NoDisplayedPositionAffectShadowStyle([ Z6 or Z9 or Z18 ]) No displayed position affects style
ms9_NoDisplayedPositionAffectShadowStyle([ Z6 or Z9 or Z18 ])CompatOnly No displayed position affects style with ms9_forceUseCompatShadow="true"
ms9_CompositeShadowStyle([ Z6 or Z9 ]) Pre-composite shadow style (less overdraws)
ms9_CompositeShadowStyle([ Z6 or Z9 ])CompatOnly Pre-composite shadow style with ms9_forceUseCompatShadow="true"

NOTE: You can specify Z[6|9|18] suffix for style names. This limits the deepest limit of shadow nine patch resources and it makes resource shrinking (shrinkResources true) work more effectively!

License

This library is licensed under the Apache Software License, Version 2.0.

See LICENSE for full of the license text.

Copyright (C) 2015 Haruki Hasegawa

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.

More Repositories

1

android-advancedrecyclerview

RecyclerView extension library which provides advanced features. (ex. Google's Inbox app like swiping, Play Music app like drag and drop sorting)
Java
5,314
star
2

android-verticalseekbar

Vertical SeekBar class which supports Android 4.x - 9.x.
Java
506
star
3

android-openslmediaplayer

Re-implementation of Android's MediaPlayer and audio effect classes based on OpenSL ES APIs.
Java
418
star
4

android-tablayouthelper

A small library which helps to use TabLayout with ViewPager more easily.
Java
186
star
5

android-scrollableviewpagercontent

Prioritize ViewPager's horizontal swipe action over vertical scroll action of inner contents
Java
39
star
6

mulsellistprefcompat

Backport MultiSelectListPreference class to older android devices
Java
32
star
7

cxxdasp

"cxxdasp" : Digital Audio Signal Processing library for C++
C++
31
star
8

RecyclerViewiOSMailAppLikeSwipe

A simple demo app how to implement iOS Mail app like swipe action
Java
20
star
9

android-numberpickercompat

Backport Material Design NumberPicker widget
Java
7
star
10

android-numberpickerprefcompat

A Preference widget with NumberPicker dialog. Works on API level 14+ devices.
Java
6
star
11

ARVExpandableGridLayout

GridLayoutManager + RecyclerViewExpandableItemManager demo app
Java
5
star
12

android-arduino-fullcolorled

Android + Arduino test program (Full color LED controls)
Shell
4
star
13

tunnel_player_workaround

This sample code shows how to avoid the Tunnel Player, and get visualizer work on Galaxy S4.
Java
3
star
14

MusicVisualizerTaskerPlugin

Official Music Visualizer plugin for integrating with Tasker automation utility app.
Kotlin
3
star
15

AnimatedVectorDrawableCompatProGuardIssue

Java
2
star
16

android-colortransitiondrawable

A Drawable class which supports color transition animation
Java
2
star
17

cxxporthelper

"cxxporthelper": Portable code helper library for C++.
C++
2
star
18

openslescxx

Provides C++ friendly wrapped OpenSL ES APIs
C++
1
star
19

FlexibleSpaceHeaderWithAdvancedRecyclerView

Java
1
star
20

Media2Experiment

Simple demo app using the new androidx.media2's MediaPlayer
Kotlin
1
star
21

DaydreamServiceLeakCheck

Bug check code for "Issue 73652: DreamService instance leaked due to inner DreamServiceWrapper class"
Groovy
1
star
22

MusicVisualizerAPI

Official Intent based API for the Music Visualizer app.
Java
1
star
23

NdkCxxdaspSkeltonApp

Demo Android Studio project integrated with cxxdasp library
Makefile
1
star
24

SwipeableWithSectionRecyclerViewDemo

Java
1
star
25

liblfds-android

Unofficial utility to build liblfds for Android
Shell
1
star
26

mkninepatch

Simple 9-patch image file generator command line tool
Python
1
star