From 651e354401e66ed8b6efcfaf04382f0df7f5ab64 Mon Sep 17 00:00:00 2001 From: btmccord Date: Sun, 7 Jan 2018 14:37:47 -0700 Subject: [PATCH 1/3] Elevation Suport Fixes elevation for ScalingLayout Views --- app/build.gradle | 2 +- scalinglib/build.gradle | 2 +- .../com/view/scalinglib/ScalingLayout.java | 31 +++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2621f81..be6945a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion "26.0.2" defaultConfig { applicationId "iammert.com.view.scalinglayout" - minSdkVersion 15 + minSdkVersion 21 targetSdkVersion 26 versionCode 1 versionName "1.0" diff --git a/scalinglib/build.gradle b/scalinglib/build.gradle index 04f1107..3e6a42f 100644 --- a/scalinglib/build.gradle +++ b/scalinglib/build.gradle @@ -7,7 +7,7 @@ android { defaultConfig { - minSdkVersion 15 + minSdkVersion 21 targetSdkVersion 26 versionCode 1 versionName "1.0" diff --git a/scalinglib/src/main/java/iammert/com/view/scalinglib/ScalingLayout.java b/scalinglib/src/main/java/iammert/com/view/scalinglib/ScalingLayout.java index b36b24f..d3f20be 100644 --- a/scalinglib/src/main/java/iammert/com/view/scalinglib/ScalingLayout.java +++ b/scalinglib/src/main/java/iammert/com/view/scalinglib/ScalingLayout.java @@ -4,6 +4,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Canvas; +import android.graphics.Outline; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; @@ -12,7 +13,9 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.AttributeSet; +import android.view.View; import android.view.ViewGroup; +import android.view.ViewOutlineProvider; import android.widget.FrameLayout; /** @@ -68,6 +71,32 @@ public class ScalingLayout extends FrameLayout { */ private ScalingLayoutListener scalingLayoutListener; + /** + * Custom ViewOutlineProvider class + */ + + private class CustomOutline extends ViewOutlineProvider { + + int width; + int height; + + CustomOutline(int width, int height) { + this.width = width; + this.height = height; + } + + @Override + public void getOutline(View view, Outline outline) { + outline.setRoundRect(0,0,width,height, currentRadius); + } + } + + /** + * CustomOutline for elevation shadows + */ + private CustomOutline viewOutline; + + public ScalingLayout(@NonNull Context context) { super(context); init(context, null); @@ -140,6 +169,8 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) { } rectF.set(0, 0, w, h); + viewOutline = new CustomOutline(w,h); + this.setOutlineProvider(viewOutline); invalidate(); } From 3527f3a779b7c8b9441a6a8a9c5cbade989c716d Mon Sep 17 00:00:00 2001 From: mertsimsek Date: Mon, 8 Jan 2018 10:36:21 +0300 Subject: [PATCH 2/3] Refactor view outline provider. --- app/src/main/res/layout/activity_fab.xml | 1 + .../com/view/scalinglib/ScalingLayout.java | 40 +++++++-------- .../ScalingLayoutOutlineProvider.java | 50 +++++++++++++++++++ 3 files changed, 68 insertions(+), 23 deletions(-) create mode 100644 scalinglib/src/main/java/iammert/com/view/scalinglib/ScalingLayoutOutlineProvider.java diff --git a/app/src/main/res/layout/activity_fab.xml b/app/src/main/res/layout/activity_fab.xml index 9254666..39ae2e6 100644 --- a/app/src/main/res/layout/activity_fab.xml +++ b/app/src/main/res/layout/activity_fab.xml @@ -14,6 +14,7 @@ android:layout_margin="16dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" + android:elevation="4dp" app:radiusFactor="1"> Date: Mon, 8 Jan 2018 10:50:23 +0300 Subject: [PATCH 3/3] Change minSDK 15 Check Lollipop and apply elevation. --- app/build.gradle | 2 +- app/src/main/res/layout/activity_fab.xml | 2 +- scalinglib/build.gradle | 2 +- .../iammert/com/view/scalinglib/ScalingLayout.java | 13 +++++++++---- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index be6945a..2621f81 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion "26.0.2" defaultConfig { applicationId "iammert.com.view.scalinglayout" - minSdkVersion 21 + minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" diff --git a/app/src/main/res/layout/activity_fab.xml b/app/src/main/res/layout/activity_fab.xml index 39ae2e6..1061f36 100644 --- a/app/src/main/res/layout/activity_fab.xml +++ b/app/src/main/res/layout/activity_fab.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/colorPrimary" + android:background="#ffffff" android:orientation="vertical" android:id="@+id/rootLayout"> diff --git a/scalinglib/build.gradle b/scalinglib/build.gradle index 3e6a42f..04f1107 100644 --- a/scalinglib/build.gradle +++ b/scalinglib/build.gradle @@ -7,7 +7,7 @@ android { defaultConfig { - minSdkVersion 21 + minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" diff --git a/scalinglib/src/main/java/iammert/com/view/scalinglib/ScalingLayout.java b/scalinglib/src/main/java/iammert/com/view/scalinglib/ScalingLayout.java index 68330b9..0e66039 100644 --- a/scalinglib/src/main/java/iammert/com/view/scalinglib/ScalingLayout.java +++ b/scalinglib/src/main/java/iammert/com/view/scalinglib/ScalingLayout.java @@ -4,18 +4,17 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Canvas; -import android.graphics.Outline; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.RectF; +import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.v4.view.ViewCompat; import android.util.AttributeSet; -import android.view.View; import android.view.ViewGroup; -import android.view.ViewOutlineProvider; import android.widget.FrameLayout; /** @@ -151,7 +150,6 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) { rectF.set(0, 0, w, h); updateViewOutline(h, currentWidth, currentRadius); - this.setOutlineProvider(viewOutline); invalidate(); } @@ -229,6 +227,13 @@ private void updateViewOutline(int height, int width, float radius) { viewOutline.setHeight(height); viewOutline.setWidth(width); viewOutline.setRadius(radius); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && ViewCompat.getElevation(this) > 0f) { + try { + setOutlineProvider(viewOutline); + } catch (Exception e) { + e.printStackTrace(); + } + } } /**