From fc36cfcf55a93cf02fd35166600738ea2e1e9634 Mon Sep 17 00:00:00 2001 From: Carl Lee Date: Wed, 23 Apr 2014 02:04:22 +0800 Subject: [PATCH 001/118] Fixed 1px border is drawn even when border width is set to 0 --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 6558957..1b8b059 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -93,7 +93,9 @@ protected void onDraw(Canvas canvas) { } canvas.drawCircle(getWidth() / 2, getHeight() / 2, mDrawableRadius, mBitmapPaint); - canvas.drawCircle(getWidth() / 2, getHeight() / 2, mBorderRadius, mBorderPaint); + if(mBorderWidth != 0){ + canvas.drawCircle(getWidth() / 2, getHeight() / 2, mBorderRadius, mBorderPaint); + } } @Override From bbeadc801e226df55a9e27ac5c3233f386e7d593 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 1 Jun 2014 15:21:50 +0200 Subject: [PATCH 002/118] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0897cfa..59da6af 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ Usage Limitations ----------- * The ScaleType is always CENTER_CROP and you'll get an exception if you try to change it. This is (currently) by design as it's perfectly fine for profile images. +* If you use Picasso for fetching images, you need to set the `noFade()` option to avoid messed up images. If you want to keep the fadeIn animation, you have to fetch the image into a `Target` and apply a custom animation when setting it as source for the `CircleImageView` in `onBitmapLoaded()`. Changelog --------- From 3738115e3027243b6e3814f4a7d7f96024cd39e7 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 6 Jul 2014 11:15:15 +0200 Subject: [PATCH 003/118] Update build environment --- build.gradle | 2 +- circleimageview/build.gradle | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/build.gradle | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 2647a46..e9475e2 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:0.7.3+' + classpath 'com.android.tools.build:gradle:0.12.+' } } diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index ac1d0c6..e1ae09a 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -1,8 +1,8 @@ -apply plugin: 'android-library' +apply plugin: 'com.android.library' android { compileSdkVersion 19 - buildToolsVersion "19.0.1" + buildToolsVersion '19.1.0' defaultConfig { minSdkVersion 9 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e4e7a74..59ddd27 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Jan 15 21:08:12 CET 2014 +#Sun Jul 6 11:03:41 CET 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.9-all.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index a72392c..bd1c4c9 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,8 +1,8 @@ -apply plugin: 'android' +apply plugin: 'com.android.application' android { compileSdkVersion 19 - buildToolsVersion "19.0.1" + buildToolsVersion '19.1.0' defaultConfig { minSdkVersion 14 From af72a113fca09463a1b43bf3c6621efd1973a62e Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 6 Jul 2014 11:16:51 +0200 Subject: [PATCH 004/118] Code style --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 1b8b059..a1796af 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -93,8 +93,8 @@ protected void onDraw(Canvas canvas) { } canvas.drawCircle(getWidth() / 2, getHeight() / 2, mDrawableRadius, mBitmapPaint); - if(mBorderWidth != 0){ - canvas.drawCircle(getWidth() / 2, getHeight() / 2, mBorderRadius, mBorderPaint); + if (mBorderWidth != 0) { + canvas.drawCircle(getWidth() / 2, getHeight() / 2, mBorderRadius, mBorderPaint); } } From 2601e9b860a7fcf8a27eeeecc1acbcb51daace2b Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 6 Jul 2014 11:21:22 +0200 Subject: [PATCH 005/118] Prepare release v1.1.1 --- README.md | 4 +++- gradle.properties | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 59da6af..6f0edeb 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Gradle ``` dependencies { ... - compile 'de.hdodenhof:circleimageview:1.1.0' + compile 'de.hdodenhof:circleimageview:1.1.1' } ``` @@ -41,6 +41,8 @@ Limitations Changelog --------- +* **1.1.1** + * Fix border being shown although border width is set to 0 * **1.1.0** * Add support for ColorDrawables * Add getters and setters for border color and border width diff --git a/gradle.properties b/gradle.properties index f66f6f2..9d5fb7f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1.1.1-SNAPSHOT +VERSION_NAME=1.1.1 GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 21027940da0d0011b7b6a72ce3b9cf09ce0cb65e Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 6 Jul 2014 11:22:41 +0200 Subject: [PATCH 006/118] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 9d5fb7f..3a000bc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1.1.1 +VERSION_NAME=1.1.2-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 233ad9ba5615309f94c49ff0f71b16c590ecf241 Mon Sep 17 00:00:00 2001 From: mqureshi Date: Tue, 15 Jul 2014 20:15:15 -0700 Subject: [PATCH 007/118] update build tools version to 20.0.0 --- circleimageview/build.gradle | 2 +- sample/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index e1ae09a..81bbf14 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' android { compileSdkVersion 19 - buildToolsVersion '19.1.0' + buildToolsVersion '20.0.0' defaultConfig { minSdkVersion 9 diff --git a/sample/build.gradle b/sample/build.gradle index bd1c4c9..22d0ed0 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 19 - buildToolsVersion '19.1.0' + buildToolsVersion '20.0.0' defaultConfig { minSdkVersion 14 From e8428bf9876129d511bc0e96157f2d8ee95af733 Mon Sep 17 00:00:00 2001 From: mqureshi Date: Tue, 15 Jul 2014 20:17:06 -0700 Subject: [PATCH 008/118] properly initialize in CircleImageView(Context) constructor --- .../de/hdodenhof/circleimageview/CircleImageView.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index a1796af..f0a9103 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -49,6 +49,8 @@ public class CircleImageView extends ImageView { public CircleImageView(Context context) { super(context); + + init(); } public CircleImageView(Context context, AttributeSet attrs) { @@ -57,7 +59,6 @@ public CircleImageView(Context context, AttributeSet attrs) { public CircleImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); - super.setScaleType(SCALE_TYPE); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0); @@ -66,6 +67,11 @@ public CircleImageView(Context context, AttributeSet attrs, int defStyle) { a.recycle(); + init(); + } + + private void init() { + super.setScaleType(SCALE_TYPE); mReady = true; if (mSetupPending) { From 6444c6a914ac7a546a3237af0720b1fa45f6a7d8 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 11 Aug 2014 17:03:43 +0200 Subject: [PATCH 009/118] Add support for setImageURI --- .../de/hdodenhof/circleimageview/CircleImageView.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index f0a9103..bae2eaa 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -13,6 +13,7 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.util.AttributeSet; import android.widget.ImageView; @@ -158,6 +159,13 @@ public void setImageResource(int resId) { setup(); } + @Override + public void setImageURI(Uri uri) { + super.setImageURI(uri); + mBitmap = getBitmapFromDrawable(getDrawable()); + setup(); + } + private Bitmap getBitmapFromDrawable(Drawable drawable) { if (drawable == null) { return null; From 9051f888d2ab5c033fe67ac6e4624ea64e1e4869 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 11 Aug 2014 17:30:03 +0200 Subject: [PATCH 010/118] Prepare release v1.2.0 --- README.md | 5 ++++- gradle.properties | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6f0edeb..3b9395b 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Gradle ``` dependencies { ... - compile 'de.hdodenhof:circleimageview:1.1.1' + compile 'de.hdodenhof:circleimageview:1.2.0' } ``` @@ -41,6 +41,9 @@ Limitations Changelog --------- +* **1.2.0** + * Add support for setImageURI(Uri uri) + * Fix view not being initialized when using CircleImageView(Context context) * **1.1.1** * Fix border being shown although border width is set to 0 * **1.1.0** diff --git a/gradle.properties b/gradle.properties index 3a000bc..77091b7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1.1.2-SNAPSHOT +VERSION_NAME=1.2.0 GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From b364fb44a1b5f0d4ebd6ac65b3985bca93901b21 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 11 Aug 2014 17:47:06 +0200 Subject: [PATCH 011/118] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 77091b7..5f21ebb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1.2.0 +VERSION_NAME=1.2.1-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 8010044080ebfc6242571f15e9a79ba22f7b8535 Mon Sep 17 00:00:00 2001 From: Don Date: Mon, 3 Nov 2014 13:28:12 -0800 Subject: [PATCH 012/118] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3b9395b..1fc2192 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ It uses a BitmapShader and **does not**: * use a clipPath (which is neither hardware accelerated nor anti-aliased) * use setXfermode to clip the bitmap (which means drawing twice to the canvas) -As this is just a custom ImaveView and not a custom Drawable or a combination of both, it can be used with all kinds of drawables, i.e. a PicassoDrawable from [Picasso](https://github.com/square/picasso) or other non-standard drawables (needs some testing though). +As this is just a custom ImageView and not a custom Drawable or a combination of both, it can be used with all kinds of drawables, i.e. a PicassoDrawable from [Picasso](https://github.com/square/picasso) or other non-standard drawables (needs some testing though). Gradle ------ From d5b672bfb818fa2453c28f0164ba794ba1bdb1e3 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 17 Nov 2014 16:44:22 +0100 Subject: [PATCH 013/118] Update build artifacts to latest versions --- build.gradle | 2 +- circleimageview/build.gradle | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/build.gradle | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index e9475e2..55a5fd9 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:0.12.+' + classpath 'com.android.tools.build:gradle:0.14.2' } } diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index 81bbf14..8762352 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 19 - buildToolsVersion '20.0.0' + compileSdkVersion 21 + buildToolsVersion '21.0.1' defaultConfig { minSdkVersion 9 - targetSdkVersion 19 + targetSdkVersion 21 } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 59ddd27..455da04 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Jul 6 11:03:41 CET 2014 +#Mon Nov 17 16:40:52 CET 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.1-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 22d0ed0..0776473 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 19 - buildToolsVersion '20.0.0' + compileSdkVersion 21 + buildToolsVersion '21.0.1' defaultConfig { minSdkVersion 14 - targetSdkVersion 19 + targetSdkVersion 21 } } From 92416911dae505a227f08581d0c799073761336c Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 17 Nov 2014 16:47:14 +0100 Subject: [PATCH 014/118] Fix ColorDrawables not being rendered properly on Lollipop; closes #23 --- .../main/java/de/hdodenhof/circleimageview/CircleImageView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index bae2eaa..acfd72b 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -22,7 +22,7 @@ public class CircleImageView extends ImageView { private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP; private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888; - private static final int COLORDRAWABLE_DIMENSION = 1; + private static final int COLORDRAWABLE_DIMENSION = 2; private static final int DEFAULT_BORDER_WIDTH = 0; private static final int DEFAULT_BORDER_COLOR = Color.BLACK; From c404fe57174b135cf5654f2db1c5067ae6cf0d7b Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 17 Nov 2014 17:50:03 +0100 Subject: [PATCH 015/118] Add missing TransitionDrawable support to limitations --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1fc2192..d084bbf 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ Limitations ----------- * The ScaleType is always CENTER_CROP and you'll get an exception if you try to change it. This is (currently) by design as it's perfectly fine for profile images. * If you use Picasso for fetching images, you need to set the `noFade()` option to avoid messed up images. If you want to keep the fadeIn animation, you have to fetch the image into a `Target` and apply a custom animation when setting it as source for the `CircleImageView` in `onBitmapLoaded()`. +* Using a `TransitionDrawable` with `CircleImageView` doesn't work properly and leads to messed up images. Changelog --------- From fb87e9c4fdf2b3dab6b0da2e55c497416aa224b0 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 17 Nov 2014 17:58:26 +0100 Subject: [PATCH 016/118] Throw exception if adjustViewBounds is enabled as this requires an unsupported scale type --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index acfd72b..ed5b125 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -93,6 +93,13 @@ public void setScaleType(ScaleType scaleType) { } } + @Override + public void setAdjustViewBounds(boolean adjustViewBounds) { + if (adjustViewBounds) { + throw new IllegalArgumentException("adjustViewBounds not supported."); + } + } + @Override protected void onDraw(Canvas canvas) { if (getDrawable() == null) { From 57e7eca373064d58c903067d14c6817031d64a8b Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 17 Nov 2014 18:04:09 +0100 Subject: [PATCH 017/118] Add missing support for adjustViewBounds to limitations; closes #24 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d084bbf..099d4f3 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ Usage Limitations ----------- * The ScaleType is always CENTER_CROP and you'll get an exception if you try to change it. This is (currently) by design as it's perfectly fine for profile images. +* Enabling `adjustViewBounds` is not supported as this requires an unsupported ScaleType * If you use Picasso for fetching images, you need to set the `noFade()` option to avoid messed up images. If you want to keep the fadeIn animation, you have to fetch the image into a `Target` and apply a custom animation when setting it as source for the `CircleImageView` in `onBitmapLoaded()`. * Using a `TransitionDrawable` with `CircleImageView` doesn't work properly and leads to messed up images. From dc948278e8fa27e307e4de873c48b026d1c72d7c Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 17 Nov 2014 18:08:26 +0100 Subject: [PATCH 018/118] Prepare release v1.2.1 --- README.md | 4 +++- gradle.properties | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 099d4f3..a71d406 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Gradle ``` dependencies { ... - compile 'de.hdodenhof:circleimageview:1.2.0' + compile 'de.hdodenhof:circleimageview:1.2.1' } ``` @@ -43,6 +43,8 @@ Limitations Changelog --------- +* **1.2.1** + * Fix ColorDrawables not being rendered properly on Lollipop * **1.2.0** * Add support for setImageURI(Uri uri) * Fix view not being initialized when using CircleImageView(Context context) diff --git a/gradle.properties b/gradle.properties index 5f21ebb..97dbe1f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1.2.1-SNAPSHOT +VERSION_NAME=1.2.1 GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 8af308b6e19e907f8501bf308e62a652d12f551c Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 17 Nov 2014 18:08:51 +0100 Subject: [PATCH 019/118] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 97dbe1f..52ae79d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1.2.1 +VERSION_NAME=1.2.2-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 5a4e9161b2bd85b462498dad3bc50e37aa8d8e53 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Wed, 14 Jan 2015 11:01:53 +0100 Subject: [PATCH 020/118] Update build artifacts to latest versions --- build.gradle | 2 +- circleimageview/build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/build.gradle | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 55a5fd9..83a449f 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:0.14.2' + classpath 'com.android.tools.build:gradle:1.0.0' } } diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index 8762352..171c245 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' android { compileSdkVersion 21 - buildToolsVersion '21.0.1' + buildToolsVersion '21.1.2' defaultConfig { minSdkVersion 9 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 455da04..60918fd 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Nov 17 16:40:52 CET 2014 +#Wed Jan 14 11:00:43 CET 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 0776473..b623afe 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 21 - buildToolsVersion '21.0.1' + buildToolsVersion '21.1.2' defaultConfig { minSdkVersion 14 From ca1782a210929f472cbdb33b498c3536962c9c2c Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Wed, 14 Jan 2015 11:13:19 +0100 Subject: [PATCH 021/118] Add ColorFilter support; closes #29 --- .../circleimageview/CircleImageView.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index ed5b125..99ee04f 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -6,6 +6,7 @@ import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.ColorFilter; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.RectF; @@ -45,6 +46,8 @@ public class CircleImageView extends ImageView { private float mDrawableRadius; private float mBorderRadius; + private ColorFilter mColorFilter; + private boolean mReady; private boolean mSetupPending; @@ -173,6 +176,16 @@ public void setImageURI(Uri uri) { setup(); } + @Override + public void setColorFilter(ColorFilter cf) { + if (cf == mColorFilter) { + return; + } + + mColorFilter = cf; + setup(); + } + private Bitmap getBitmapFromDrawable(Drawable drawable) { if (drawable == null) { return null; @@ -214,6 +227,9 @@ private void setup() { mBitmapPaint.setAntiAlias(true); mBitmapPaint.setShader(mBitmapShader); + if (mColorFilter != null) { + mBitmapPaint.setColorFilter(mColorFilter); + } mBorderPaint.setStyle(Paint.Style.STROKE); mBorderPaint.setAntiAlias(true); From d2bfacd8d4922b0e3bc0a3986514d6ddcc7de976 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Wed, 14 Jan 2015 11:39:59 +0100 Subject: [PATCH 022/118] Fix and improve ColorFilter implementation --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 99ee04f..344da44 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -183,7 +183,8 @@ public void setColorFilter(ColorFilter cf) { } mColorFilter = cf; - setup(); + mBitmapPaint.setColorFilter(mColorFilter); + invalidate(); } private Bitmap getBitmapFromDrawable(Drawable drawable) { @@ -227,9 +228,6 @@ private void setup() { mBitmapPaint.setAntiAlias(true); mBitmapPaint.setShader(mBitmapShader); - if (mColorFilter != null) { - mBitmapPaint.setColorFilter(mColorFilter); - } mBorderPaint.setStyle(Paint.Style.STROKE); mBorderPaint.setAntiAlias(true); From ea5eac656505578ddc08990775e626b8bb6550d5 Mon Sep 17 00:00:00 2001 From: Egor Andreevici Date: Sat, 24 Jan 2015 17:02:21 +0100 Subject: [PATCH 023/118] Added setBorderColorResource() to allow passing color resource references --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 344da44..47f4230 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -135,6 +135,10 @@ public void setBorderColor(int borderColor) { invalidate(); } + public void setBorderColorResource(int borderColorRes) { + setBorderColor(getContext().getResources().getColor(borderColorRes)); + } + public int getBorderWidth() { return mBorderWidth; } From 473c3e1239b6fb2bc78ca848013c3b3c4b4397d8 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Wed, 25 Feb 2015 20:06:33 +0100 Subject: [PATCH 024/118] Prepare release v1.2.2 --- README.md | 4 +++- gradle.properties | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a71d406..c25977a 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Gradle ``` dependencies { ... - compile 'de.hdodenhof:circleimageview:1.2.1' + compile 'de.hdodenhof:circleimageview:1.2.2' } ``` @@ -43,6 +43,8 @@ Limitations Changelog --------- +* **1.2.2** + * Add ColorFilter support * **1.2.1** * Fix ColorDrawables not being rendered properly on Lollipop * **1.2.0** diff --git a/gradle.properties b/gradle.properties index 52ae79d..d2daead 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1.2.2-SNAPSHOT +VERSION_NAME=1.2.2 GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 6da865ee72c6c317d1ec5eea6d6dc90ca56e0614 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Wed, 25 Feb 2015 20:07:37 +0100 Subject: [PATCH 025/118] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index d2daead..0a35023 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1.2.2 +VERSION_NAME=1.2.3-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 969a7ee74c26dfca311048ed09e96a23588539aa Mon Sep 17 00:00:00 2001 From: Alexander Prime Date: Wed, 4 Mar 2015 06:46:01 -0700 Subject: [PATCH 026/118] Add border_inset attribute; set to false to draw border in front of image --- .../circleimageview/CircleImageView.java | 21 +++++++++++++++++-- circleimageview/src/main/res/values/attrs.xml | 1 + 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 344da44..9b12bb1 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -27,6 +27,7 @@ public class CircleImageView extends ImageView { private static final int DEFAULT_BORDER_WIDTH = 0; private static final int DEFAULT_BORDER_COLOR = Color.BLACK; + private static final boolean DEFAULT_BORDER_INSET = true; private final RectF mDrawableRect = new RectF(); private final RectF mBorderRect = new RectF(); @@ -50,6 +51,7 @@ public class CircleImageView extends ImageView { private boolean mReady; private boolean mSetupPending; + private boolean mBorderInset; public CircleImageView(Context context) { super(context); @@ -68,6 +70,7 @@ public CircleImageView(Context context, AttributeSet attrs, int defStyle) { mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH); mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR); + mBorderInset = a.getBoolean(R.styleable.CircleImageView_border_inset, DEFAULT_BORDER_INSET ); a.recycle(); @@ -148,6 +151,19 @@ public void setBorderWidth(int borderWidth) { setup(); } + public boolean getBorderInset() { + return mBorderInset; + } + + public void setBorderInset(boolean borderInset) { + if (borderInset == mBorderInset) { + return; + } + + mBorderInset = borderInset; + setup(); + } + @Override public void setImageBitmap(Bitmap bm) { super.setImageBitmap(bm); @@ -240,7 +256,8 @@ private void setup() { mBorderRect.set(0, 0, getWidth(), getHeight()); mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2, (mBorderRect.width() - mBorderWidth) / 2); - mDrawableRect.set(mBorderWidth, mBorderWidth, mBorderRect.width() - mBorderWidth, mBorderRect.height() - mBorderWidth); + mDrawableRect.set(mBorderRect); + if (mBorderInset) mDrawableRect.inset(mBorderWidth, mBorderWidth); mDrawableRadius = Math.min(mDrawableRect.height() / 2, mDrawableRect.width() / 2); updateShaderMatrix(); @@ -263,7 +280,7 @@ private void updateShaderMatrix() { } mShaderMatrix.setScale(scale, scale); - mShaderMatrix.postTranslate((int) (dx + 0.5f) + mBorderWidth, (int) (dy + 0.5f) + mBorderWidth); + mShaderMatrix.postTranslate((int) (dx + 0.5f) + mDrawableRect.left, (int) (dy + 0.5f) + mDrawableRect.top); mBitmapShader.setLocalMatrix(mShaderMatrix); } diff --git a/circleimageview/src/main/res/values/attrs.xml b/circleimageview/src/main/res/values/attrs.xml index 2acfe65..342e370 100644 --- a/circleimageview/src/main/res/values/attrs.xml +++ b/circleimageview/src/main/res/values/attrs.xml @@ -3,5 +3,6 @@ + \ No newline at end of file From 73c51fd4bc1c7eabe28aa2dbe2536933ff52d785 Mon Sep 17 00:00:00 2001 From: Egor Andreevici Date: Sun, 3 May 2015 08:57:28 +0200 Subject: [PATCH 027/118] Added resource annotations to 'resource id' method parameters --- circleimageview/build.gradle | 4 ++++ .../java/de/hdodenhof/circleimageview/CircleImageView.java | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index 171c245..ca43af2 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -10,4 +10,8 @@ android { } } +dependencies { + provided 'com.android.support:support-annotations:22.1.1' +} + apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle' \ No newline at end of file diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 47f4230..2e9f5c3 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -15,6 +15,8 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.support.annotation.ColorRes; +import android.support.annotation.DrawableRes; import android.util.AttributeSet; import android.widget.ImageView; @@ -135,7 +137,7 @@ public void setBorderColor(int borderColor) { invalidate(); } - public void setBorderColorResource(int borderColorRes) { + public void setBorderColorResource(@ColorRes int borderColorRes) { setBorderColor(getContext().getResources().getColor(borderColorRes)); } @@ -167,7 +169,7 @@ public void setImageDrawable(Drawable drawable) { } @Override - public void setImageResource(int resId) { + public void setImageResource(@DrawableRes int resId) { super.setImageResource(resId); mBitmap = getBitmapFromDrawable(getDrawable()); setup(); From a74cbbf3b87a557f02ad2609451b10d650f89ad4 Mon Sep 17 00:00:00 2001 From: Alexander Prime Date: Sun, 3 May 2015 04:44:40 -0700 Subject: [PATCH 028/118] Style cleanup --- .../circleimageview/CircleImageView.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 9b12bb1..344baf5 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -70,7 +70,7 @@ public CircleImageView(Context context, AttributeSet attrs, int defStyle) { mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH); mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR); - mBorderInset = a.getBoolean(R.styleable.CircleImageView_border_inset, DEFAULT_BORDER_INSET ); + mBorderInset = a.getBoolean(R.styleable.CircleImageView_border_inset, DEFAULT_BORDER_INSET); a.recycle(); @@ -151,18 +151,18 @@ public void setBorderWidth(int borderWidth) { setup(); } - public boolean getBorderInset() { - return mBorderInset; - } + public boolean getBorderInset() { + return mBorderInset; + } - public void setBorderInset(boolean borderInset) { - if (borderInset == mBorderInset) { - return; - } + public void setBorderInset(boolean borderInset) { + if (borderInset == mBorderInset) { + return; + } - mBorderInset = borderInset; - setup(); - } + mBorderInset = borderInset; + setup(); + } @Override public void setImageBitmap(Bitmap bm) { @@ -257,7 +257,9 @@ private void setup() { mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2, (mBorderRect.width() - mBorderWidth) / 2); mDrawableRect.set(mBorderRect); - if (mBorderInset) mDrawableRect.inset(mBorderWidth, mBorderWidth); + if (mBorderInset) { + mDrawableRect.inset(mBorderWidth, mBorderWidth); + } mDrawableRadius = Math.min(mDrawableRect.height() / 2, mDrawableRect.width() / 2); updateShaderMatrix(); From d9b70755b7acf8a6b796ba6615a8b26d9a9775eb Mon Sep 17 00:00:00 2001 From: Alexander Prime Date: Mon, 4 May 2015 04:36:21 -0700 Subject: [PATCH 029/118] Rename border_inset -> border_overlay, booleanify getter --- .../circleimageview/CircleImageView.java | 18 +++++++++--------- circleimageview/src/main/res/values/attrs.xml | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 344baf5..98817c6 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -27,7 +27,7 @@ public class CircleImageView extends ImageView { private static final int DEFAULT_BORDER_WIDTH = 0; private static final int DEFAULT_BORDER_COLOR = Color.BLACK; - private static final boolean DEFAULT_BORDER_INSET = true; + private static final boolean DEFAULT_BORDER_OVERLAY = true; private final RectF mDrawableRect = new RectF(); private final RectF mBorderRect = new RectF(); @@ -51,7 +51,7 @@ public class CircleImageView extends ImageView { private boolean mReady; private boolean mSetupPending; - private boolean mBorderInset; + private boolean mBorderOverlay; public CircleImageView(Context context) { super(context); @@ -70,7 +70,7 @@ public CircleImageView(Context context, AttributeSet attrs, int defStyle) { mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH); mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR); - mBorderInset = a.getBoolean(R.styleable.CircleImageView_border_inset, DEFAULT_BORDER_INSET); + mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_border_overlay, DEFAULT_BORDER_OVERLAY); a.recycle(); @@ -151,16 +151,16 @@ public void setBorderWidth(int borderWidth) { setup(); } - public boolean getBorderInset() { - return mBorderInset; + public boolean isBorderOverlay() { + return mBorderOverlay; } - public void setBorderInset(boolean borderInset) { - if (borderInset == mBorderInset) { + public void setBorderOverlay(boolean borderOverlay) { + if (borderOverlay == mBorderOverlay) { return; } - mBorderInset = borderInset; + mBorderOverlay = borderOverlay; setup(); } @@ -257,7 +257,7 @@ private void setup() { mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2, (mBorderRect.width() - mBorderWidth) / 2); mDrawableRect.set(mBorderRect); - if (mBorderInset) { + if (mBorderOverlay) { mDrawableRect.inset(mBorderWidth, mBorderWidth); } mDrawableRadius = Math.min(mDrawableRect.height() / 2, mDrawableRect.width() / 2); diff --git a/circleimageview/src/main/res/values/attrs.xml b/circleimageview/src/main/res/values/attrs.xml index 342e370..7ea209f 100644 --- a/circleimageview/src/main/res/values/attrs.xml +++ b/circleimageview/src/main/res/values/attrs.xml @@ -3,6 +3,6 @@ - + \ No newline at end of file From 5977670894c6983bcd954f5977457af6b98855f5 Mon Sep 17 00:00:00 2001 From: Alexander Prime Date: Wed, 6 May 2015 03:08:42 -0700 Subject: [PATCH 030/118] Default border_overlay to false, invert its meaning --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 98817c6..b2a67ee 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -27,7 +27,7 @@ public class CircleImageView extends ImageView { private static final int DEFAULT_BORDER_WIDTH = 0; private static final int DEFAULT_BORDER_COLOR = Color.BLACK; - private static final boolean DEFAULT_BORDER_OVERLAY = true; + private static final boolean DEFAULT_BORDER_OVERLAY = false; private final RectF mDrawableRect = new RectF(); private final RectF mBorderRect = new RectF(); @@ -257,7 +257,7 @@ private void setup() { mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2, (mBorderRect.width() - mBorderWidth) / 2); mDrawableRect.set(mBorderRect); - if (mBorderOverlay) { + if (!mBorderOverlay) { mDrawableRect.inset(mBorderWidth, mBorderWidth); } mDrawableRadius = Math.min(mDrawableRect.height() / 2, mDrawableRect.width() / 2); From d80d6d52c58a1f15dfb175e1faf4a56a453ffb1d Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Thu, 7 May 2015 22:26:01 +0200 Subject: [PATCH 031/118] Update build artifacts to latest versions --- build.gradle | 2 +- circleimageview/build.gradle | 6 +++--- sample/build.gradle | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 83a449f..6856790 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:1.0.0' + classpath 'com.android.tools.build:gradle:1.2.2' } } diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index ca43af2..442b127 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 21 - buildToolsVersion '21.1.2' + compileSdkVersion 22 + buildToolsVersion '22.0.1' defaultConfig { minSdkVersion 9 - targetSdkVersion 21 + targetSdkVersion 22 } } diff --git a/sample/build.gradle b/sample/build.gradle index b623afe..87349ce 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 21 - buildToolsVersion '21.1.2' + compileSdkVersion 22 + buildToolsVersion '22.0.1' defaultConfig { minSdkVersion 14 - targetSdkVersion 21 + targetSdkVersion 22 } } From 4bbdb57a990023c56d88376f3b6bc97ffb648828 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Thu, 7 May 2015 22:41:59 +0200 Subject: [PATCH 032/118] Prepare release v1.3.0 --- README.md | 6 +++++- gradle.properties | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c25977a..36d1d27 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Gradle ``` dependencies { ... - compile 'de.hdodenhof:circleimageview:1.2.2' + compile 'de.hdodenhof:circleimageview:1.3.0' } ``` @@ -43,6 +43,10 @@ Limitations Changelog --------- +* **1.3.0** + * Add setBorderColorResource(int resId) + * Add resource type annotations + * Add border_overlay attribute to allow drawing border on top of the base image * **1.2.2** * Add ColorFilter support * **1.2.1** diff --git a/gradle.properties b/gradle.properties index 0a35023..3d42e57 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1.2.3-SNAPSHOT +VERSION_NAME=1.3.0 GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 70b48104b21bdf03073aa5f4f89fbb54d584da08 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Thu, 7 May 2015 22:49:17 +0200 Subject: [PATCH 033/118] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 3d42e57..becc5e2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1.3.0 +VERSION_NAME=1.3.1-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 630aa569b7fcf8ed37f4877d009ad743c7e151a4 Mon Sep 17 00:00:00 2001 From: Alex Koller Date: Wed, 13 May 2015 13:58:27 +0200 Subject: [PATCH 034/118] Prefix xml custom attributes to avoid conflicts with other libraries. --- .../de/hdodenhof/circleimageview/CircleImageView.java | 6 +++--- circleimageview/src/main/res/values/attrs.xml | 6 +++--- sample/src/main/res/layout/fragment_main.xml | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 8d88b17..6d3519b 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -70,9 +70,9 @@ public CircleImageView(Context context, AttributeSet attrs, int defStyle) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0); - mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH); - mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR); - mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_border_overlay, DEFAULT_BORDER_OVERLAY); + mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_civ_border_width, DEFAULT_BORDER_WIDTH); + mBorderColor = a.getColor(R.styleable.CircleImageView_civ_border_color, DEFAULT_BORDER_COLOR); + mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_civ_border_overlay, DEFAULT_BORDER_OVERLAY); a.recycle(); diff --git a/circleimageview/src/main/res/values/attrs.xml b/circleimageview/src/main/res/values/attrs.xml index 7ea209f..b585fa2 100644 --- a/circleimageview/src/main/res/values/attrs.xml +++ b/circleimageview/src/main/res/values/attrs.xml @@ -1,8 +1,8 @@ - - - + + + \ No newline at end of file diff --git a/sample/src/main/res/layout/fragment_main.xml b/sample/src/main/res/layout/fragment_main.xml index 45f95da..6594bcf 100644 --- a/sample/src/main/res/layout/fragment_main.xml +++ b/sample/src/main/res/layout/fragment_main.xml @@ -19,8 +19,8 @@ android:layout_height="160dp" android:layout_centerInParent="true" android:src="@drawable/hugh" - app:border_width="2dp" - app:border_color="@color/dark" /> + app:civ_border_width="2dp" + app:civ_border_color="@color/dark" /> @@ -36,8 +36,8 @@ android:layout_height="160dp" android:layout_centerInParent="true" android:src="@drawable/hugh" - app:border_width="2dp" - app:border_color="@color/light" /> + app:civ_border_width="2dp" + app:civ_border_color="@color/light" /> From 7c20cf09aca9116710799f96452d80fb57e21ebd Mon Sep 17 00:00:00 2001 From: Zoltan Arvai Date: Mon, 25 May 2015 23:07:37 +0200 Subject: [PATCH 035/118] Use float numbers in division otherwise the edge of the circle can be cut down on small images. --- .../de/hdodenhof/circleimageview/CircleImageView.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 8d88b17..e4c4899 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -114,9 +114,9 @@ protected void onDraw(Canvas canvas) { return; } - canvas.drawCircle(getWidth() / 2, getHeight() / 2, mDrawableRadius, mBitmapPaint); + canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mDrawableRadius, mBitmapPaint); if (mBorderWidth != 0) { - canvas.drawCircle(getWidth() / 2, getHeight() / 2, mBorderRadius, mBorderPaint); + canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mBorderRadius, mBorderPaint); } } @@ -260,13 +260,13 @@ private void setup() { mBitmapWidth = mBitmap.getWidth(); mBorderRect.set(0, 0, getWidth(), getHeight()); - mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2, (mBorderRect.width() - mBorderWidth) / 2); + mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2.0f, (mBorderRect.width() - mBorderWidth) / 2.0f); mDrawableRect.set(mBorderRect); if (!mBorderOverlay) { mDrawableRect.inset(mBorderWidth, mBorderWidth); } - mDrawableRadius = Math.min(mDrawableRect.height() / 2, mDrawableRect.width() / 2); + mDrawableRadius = Math.min(mDrawableRect.height() / 2.0f, mDrawableRect.width() / 2.0f); updateShaderMatrix(); invalidate(); From c4669b6e32d05d2827c3d60da3d515bfaa13b650 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 14 Sep 2015 15:20:13 +0200 Subject: [PATCH 036/118] Update build artifacts to latest versions --- build.gradle | 2 +- circleimageview/build.gradle | 8 ++++---- sample/build.gradle | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 6856790..bba8759 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:1.2.2' + classpath 'com.android.tools.build:gradle:1.3.0' } } diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index 442b127..80b8694 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -1,17 +1,17 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 22 - buildToolsVersion '22.0.1' + compileSdkVersion 23 + buildToolsVersion '23.0.1' defaultConfig { minSdkVersion 9 - targetSdkVersion 22 + targetSdkVersion 23 } } dependencies { - provided 'com.android.support:support-annotations:22.1.1' + provided 'com.android.support:support-annotations:23.0.1' } apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle' \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle index 87349ce..9e02864 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 22 - buildToolsVersion '22.0.1' + compileSdkVersion 23 + buildToolsVersion '23.0.1' defaultConfig { minSdkVersion 14 - targetSdkVersion 22 + targetSdkVersion 23 } } From 6d5d5306e760148680e08d85cc2747d2c844b348 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 14 Sep 2015 16:03:59 +0200 Subject: [PATCH 037/118] Fix bitmap not being cleared after set to null --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index e9f68ca..f607bd4 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -110,7 +110,7 @@ public void setAdjustViewBounds(boolean adjustViewBounds) { @Override protected void onDraw(Canvas canvas) { - if (getDrawable() == null) { + if (mBitmap == null) { return; } @@ -194,7 +194,7 @@ public void setImageResource(@DrawableRes int resId) { @Override public void setImageURI(Uri uri) { super.setImageURI(uri); - mBitmap = getBitmapFromDrawable(getDrawable()); + mBitmap = uri != null ? getBitmapFromDrawable(getDrawable()) : null; setup(); } @@ -243,6 +243,7 @@ private void setup() { } if (mBitmap == null) { + invalidate(); return; } From f9d42445db184e72c8004e59efbd6f21e1a78cc4 Mon Sep 17 00:00:00 2001 From: Tom Billiet Date: Tue, 24 Feb 2015 17:12:49 +0100 Subject: [PATCH 038/118] Support for fill/background color --- .../circleimageview/CircleImageView.java | 36 ++++++++++++++++++- circleimageview/src/main/res/values/attrs.xml | 3 +- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index f607bd4..de7b5b3 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -29,6 +29,7 @@ public class CircleImageView extends ImageView { private static final int DEFAULT_BORDER_WIDTH = 0; private static final int DEFAULT_BORDER_COLOR = Color.BLACK; + private static final int DEFAULT_FILL_COLOR = Color.TRANSPARENT; private static final boolean DEFAULT_BORDER_OVERLAY = false; private final RectF mDrawableRect = new RectF(); @@ -37,9 +38,11 @@ public class CircleImageView extends ImageView { private final Matrix mShaderMatrix = new Matrix(); private final Paint mBitmapPaint = new Paint(); private final Paint mBorderPaint = new Paint(); + private final Paint mFillPaint = new Paint(); private int mBorderColor = DEFAULT_BORDER_COLOR; private int mBorderWidth = DEFAULT_BORDER_WIDTH; + private int mFillColor = DEFAULT_FILL_COLOR; private Bitmap mBitmap; private BitmapShader mBitmapShader; @@ -73,6 +76,7 @@ public CircleImageView(Context context, AttributeSet attrs, int defStyle) { mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_civ_border_width, DEFAULT_BORDER_WIDTH); mBorderColor = a.getColor(R.styleable.CircleImageView_civ_border_color, DEFAULT_BORDER_COLOR); mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_civ_border_overlay, DEFAULT_BORDER_OVERLAY); + mFillColor = a.getColor(R.styleable.CircleImageView_civ_fill_color, DEFAULT_FILL_COLOR); a.recycle(); @@ -114,6 +118,10 @@ protected void onDraw(Canvas canvas) { return; } + if (mFillColor != Color.TRANSPARENT) { + //only draw fill color if color is not transparent + canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mDrawableRadius, mFillPaint); + } canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mDrawableRadius, mBitmapPaint); if (mBorderWidth != 0) { canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mBorderRadius, mBorderPaint); @@ -144,6 +152,28 @@ public void setBorderColorResource(@ColorRes int borderColorRes) { setBorderColor(getContext().getResources().getColor(borderColorRes)); } + /** + * Get the fill/background color + * @return The color. + */ + public int getFillColor() { + return mFillColor; + } + + /** + * Set the fill/background color of the image. Only useful if the image contains transparent areas. + * @param fillColor The fill color. + */ + public void setFillColor(int fillColor) { + if (fillColor == mFillColor) { + return; + } + + mFillColor = fillColor; + mFillPaint.setColor(fillColor); + invalidate(); + } + public int getBorderWidth() { return mBorderWidth; } @@ -257,6 +287,10 @@ private void setup() { mBorderPaint.setColor(mBorderColor); mBorderPaint.setStrokeWidth(mBorderWidth); + mFillPaint.setStyle(Paint.Style.FILL); + mFillPaint.setAntiAlias(true); + mFillPaint.setColor(mFillColor); + mBitmapHeight = mBitmap.getHeight(); mBitmapWidth = mBitmap.getWidth(); @@ -294,4 +328,4 @@ private void updateShaderMatrix() { mBitmapShader.setLocalMatrix(mShaderMatrix); } -} \ No newline at end of file +} diff --git a/circleimageview/src/main/res/values/attrs.xml b/circleimageview/src/main/res/values/attrs.xml index b585fa2..ab6c430 100644 --- a/circleimageview/src/main/res/values/attrs.xml +++ b/circleimageview/src/main/res/values/attrs.xml @@ -4,5 +4,6 @@ + - \ No newline at end of file + From 19e19ceb8ceedd9d7738cd231776b027f17e9a46 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 14 Sep 2015 16:21:56 +0200 Subject: [PATCH 039/118] Cleanup --- .../de/hdodenhof/circleimageview/CircleImageView.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index de7b5b3..4448396 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -119,7 +119,6 @@ protected void onDraw(Canvas canvas) { } if (mFillColor != Color.TRANSPARENT) { - //only draw fill color if color is not transparent canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mDrawableRadius, mFillPaint); } canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mDrawableRadius, mBitmapPaint); @@ -152,18 +151,10 @@ public void setBorderColorResource(@ColorRes int borderColorRes) { setBorderColor(getContext().getResources().getColor(borderColorRes)); } - /** - * Get the fill/background color - * @return The color. - */ public int getFillColor() { return mFillColor; } - /** - * Set the fill/background color of the image. Only useful if the image contains transparent areas. - * @param fillColor The fill color. - */ public void setFillColor(int fillColor) { if (fillColor == mFillColor) { return; From 1f5c50cfaefb0b6354ebe555a7885a05f4f2f009 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 14 Sep 2015 17:21:52 +0200 Subject: [PATCH 040/118] Lower minSdkVersion to 8 --- circleimageview/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index 80b8694..a5f339f 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion '23.0.1' defaultConfig { - minSdkVersion 9 + minSdkVersion 8 targetSdkVersion 23 } } From 90f6250218c7bdfdbaa6e13f2d0534595830db52 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 14 Sep 2015 19:26:21 +0200 Subject: [PATCH 041/118] Don't crash when fed with incompatible drawables --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 4448396..331e795 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -252,7 +252,8 @@ private Bitmap getBitmapFromDrawable(Drawable drawable) { drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; - } catch (OutOfMemoryError e) { + } catch (Exception e) { + e.printStackTrace(); return null; } } From d74ed7d902f3584a908df2b3db1396749e19600a Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 14 Sep 2015 19:33:12 +0200 Subject: [PATCH 042/118] Major version bump --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index becc5e2..176ba86 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1.3.1-SNAPSHOT +VERSION_NAME=2.0.0-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 9e53f8cf788b74a9dd18344ddf70b10bb80e6308 Mon Sep 17 00:00:00 2001 From: start141 <415043846@qq.com> Date: Tue, 15 Sep 2015 11:59:48 +0800 Subject: [PATCH 043/118] Not to setup when width and height is 0 --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 331e795..d149940 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -259,6 +259,10 @@ private Bitmap getBitmapFromDrawable(Drawable drawable) { } private void setup() { + if (getWidth() == 0 && getHeight() == 0) { + return; + } + if (!mReady) { mSetupPending = true; return; From 0d9f88a94732741abae1494a9b3a034c51951383 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Tue, 15 Sep 2015 11:50:23 +0200 Subject: [PATCH 044/118] Reorder setup condition checks --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index d149940..2cc2cee 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -259,12 +259,12 @@ private Bitmap getBitmapFromDrawable(Drawable drawable) { } private void setup() { - if (getWidth() == 0 && getHeight() == 0) { + if (!mReady) { + mSetupPending = true; return; } - if (!mReady) { - mSetupPending = true; + if (getWidth() == 0 && getHeight() == 0) { return; } From 754a6b508e18d8b6fc9f580a64d371122ccdcb36 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 20 Sep 2015 15:37:15 +0200 Subject: [PATCH 045/118] More support annotations; missing setter for fill color --- .../de/hdodenhof/circleimageview/CircleImageView.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 2cc2cee..ce6cdaa 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -15,6 +15,7 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.support.annotation.ColorInt; import android.support.annotation.ColorRes; import android.support.annotation.DrawableRes; import android.util.AttributeSet; @@ -137,7 +138,7 @@ public int getBorderColor() { return mBorderColor; } - public void setBorderColor(int borderColor) { + public void setBorderColor(@ColorInt int borderColor) { if (borderColor == mBorderColor) { return; } @@ -155,7 +156,7 @@ public int getFillColor() { return mFillColor; } - public void setFillColor(int fillColor) { + public void setFillColor(@ColorInt int fillColor) { if (fillColor == mFillColor) { return; } @@ -165,6 +166,10 @@ public void setFillColor(int fillColor) { invalidate(); } + public void setFillColorResource(@ColorRes int fillColorRes) { + setFillColor(getContext().getResources().getColor(fillColorRes)); + } + public int getBorderWidth() { return mBorderWidth; } From 93e4da5ac8c97c9062b3f89b1af612de2ab40095 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 20 Sep 2015 16:20:48 +0200 Subject: [PATCH 046/118] Sample now runs on Froyo... yikes! --- sample/build.gradle | 2 +- .../circleimageview/sample/MainActivity.java | 23 --------- sample/src/main/res/layout/activity_main.xml | 48 ++++++++++++++++--- sample/src/main/res/layout/fragment_main.xml | 45 ----------------- 4 files changed, 42 insertions(+), 76 deletions(-) delete mode 100644 sample/src/main/res/layout/fragment_main.xml diff --git a/sample/build.gradle b/sample/build.gradle index 9e02864..27025e1 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion '23.0.1' defaultConfig { - minSdkVersion 14 + minSdkVersion 8 targetSdkVersion 23 } } diff --git a/sample/src/main/java/de/hdodenhof/circleimageview/sample/MainActivity.java b/sample/src/main/java/de/hdodenhof/circleimageview/sample/MainActivity.java index e2bb4e8..7875520 100644 --- a/sample/src/main/java/de/hdodenhof/circleimageview/sample/MainActivity.java +++ b/sample/src/main/java/de/hdodenhof/circleimageview/sample/MainActivity.java @@ -1,11 +1,7 @@ package de.hdodenhof.circleimageview.sample; import android.app.Activity; -import android.app.Fragment; import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; public class MainActivity extends Activity { @@ -13,25 +9,6 @@ public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - - if (savedInstanceState == null) { - getFragmentManager().beginTransaction() - .add(R.id.container, new MainFragment()) - .commit(); - } - } - - public static class MainFragment extends Fragment { - - public MainFragment() { - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.fragment_main, container, false); - return rootView; - } } } diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index 486edff..439cf57 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -1,8 +1,42 @@ - + + + + + + + + + + + + + + + diff --git a/sample/src/main/res/layout/fragment_main.xml b/sample/src/main/res/layout/fragment_main.xml deleted file mode 100644 index 6594bcf..0000000 --- a/sample/src/main/res/layout/fragment_main.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - From 28c0c9e4f68e1e0478e6e09cd15945df8b966ddb Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 20 Sep 2015 16:42:29 +0200 Subject: [PATCH 047/118] Prepare release v2.0.0 --- README.md | 14 ++++++++++---- gradle.properties | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 36d1d27..ef73b18 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Gradle ``` dependencies { ... - compile 'de.hdodenhof:circleimageview:1.3.0' + compile 'de.hdodenhof:circleimageview:2.0.0' } ``` @@ -30,8 +30,8 @@ Usage android:layout_width="96dp" android:layout_height="96dp" android:src="@drawable/profile" - app:border_width="2dp" - app:border_color="#FF000000"/> + app:civ_border_width="2dp" + app:civ_border_color="#FF000000"/> ``` Limitations @@ -43,6 +43,12 @@ Limitations Changelog --------- +* **2.0.0** + * BREAKING: Custom xml attributes are now prefixed with "civ_" + * Graceful handling of incompatible drawables + * Add support for a fill color shown behind images with transparent areas + * Fix dimension calculation issues with small images + * Fix bitmap not being cleared when set to null * **1.3.0** * Add setBorderColorResource(int resId) * Add resource type annotations @@ -67,7 +73,7 @@ Changelog License ------- - Copyright 2014 Henning Dodenhof + Copyright 2014 - 2015 Henning Dodenhof Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/gradle.properties b/gradle.properties index 176ba86..a5f4bdd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=2.0.0-SNAPSHOT +VERSION_NAME=2.0.0 GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 6882bfc22cb5c2358acf3bf730890db0ae346022 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 20 Sep 2015 16:47:53 +0200 Subject: [PATCH 048/118] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index a5f4bdd..b283d0b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=2.0.0 +VERSION_NAME=2.0.1-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 6caafd60c71f885cd2c58c08e9063591bab2c77a Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 20 Sep 2015 17:29:43 +0200 Subject: [PATCH 049/118] Add license header --- .../circleimageview/CircleImageView.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index ce6cdaa..782c34a 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -1,3 +1,18 @@ +/* + * Copyright 2014 - 2015 Henning Dodenhof + * + * 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. + */ package de.hdodenhof.circleimageview; import android.content.Context; From 4160c751d50fbfc247fbc877319da3042504824e Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sat, 30 Jan 2016 12:23:47 +0100 Subject: [PATCH 050/118] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ef73b18..c7431eb 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ Limitations ----------- * The ScaleType is always CENTER_CROP and you'll get an exception if you try to change it. This is (currently) by design as it's perfectly fine for profile images. * Enabling `adjustViewBounds` is not supported as this requires an unsupported ScaleType -* If you use Picasso for fetching images, you need to set the `noFade()` option to avoid messed up images. If you want to keep the fadeIn animation, you have to fetch the image into a `Target` and apply a custom animation when setting it as source for the `CircleImageView` in `onBitmapLoaded()`. +* If you use an image loading library like Picasso or Glide, you need to disable their fade animations to avoid messed up images. For Picasso use the `noFade()` option, for Glide use `dontAnimate()`. If you want to keep the fadeIn animation, you have to fetch the image into a `Target` and apply a custom animation yourself when receiving the `Bitmap`. * Using a `TransitionDrawable` with `CircleImageView` doesn't work properly and leads to messed up images. Changelog From dd083c7e1157897e46d90c475013e3f8d983d1be Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sat, 30 Jan 2016 13:10:54 +0100 Subject: [PATCH 051/118] Update all the dependencies --- build.gradle | 2 +- circleimageview/build.gradle | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 3 +-- sample/build.gradle | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index bba8759..ec1c36d 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:1.3.0' + classpath 'com.android.tools.build:gradle:1.5.0' } } diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index a5f339f..ea9b66b 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' android { compileSdkVersion 23 - buildToolsVersion '23.0.1' + buildToolsVersion '23.0.2' defaultConfig { minSdkVersion 8 @@ -11,7 +11,7 @@ android { } dependencies { - provided 'com.android.support:support-annotations:23.0.1' + provided 'com.android.support:support-annotations:23.1.1' } apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle' \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 60918fd..9851e51 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Wed Jan 14 11:00:43 CET 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 27025e1..b5d8d9a 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 23 - buildToolsVersion '23.0.1' + buildToolsVersion '23.0.2' defaultConfig { minSdkVersion 8 From aedcf629aa7481e245337988e6744fc05de46a8d Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 17 Apr 2016 13:06:59 +0200 Subject: [PATCH 052/118] Update gradle plugin and build tools to latest versions --- build.gradle | 2 +- sample/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index ec1c36d..18108df 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:1.5.0' + classpath 'com.android.tools.build:gradle:2.0.0' } } diff --git a/sample/build.gradle b/sample/build.gradle index b5d8d9a..781c824 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 23 - buildToolsVersion '23.0.2' + buildToolsVersion '23.0.3' defaultConfig { minSdkVersion 8 From 3d8ea5c80684f92394b6d906061b72ae55b34693 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 17 Apr 2016 13:22:07 +0200 Subject: [PATCH 053/118] Fix NPE caused by tint attribute on api levels < 21; #105 --- .../de/hdodenhof/circleimageview/CircleImageView.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 782c34a..8e1e0b2 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -246,10 +246,16 @@ public void setColorFilter(ColorFilter cf) { } mColorFilter = cf; - mBitmapPaint.setColorFilter(mColorFilter); + applyColorFilter(); invalidate(); } + private void applyColorFilter() { + if (mBitmapPaint != null) { + mBitmapPaint.setColorFilter(mColorFilter); + } + } + private Bitmap getBitmapFromDrawable(Drawable drawable) { if (drawable == null) { return null; @@ -319,6 +325,7 @@ private void setup() { } mDrawableRadius = Math.min(mDrawableRect.height() / 2.0f, mDrawableRect.width() / 2.0f); + applyColorFilter(); updateShaderMatrix(); invalidate(); } From a50a1c1de770a110f2bf7583269e959f3fbdbe9f Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 25 Apr 2016 11:18:03 +0200 Subject: [PATCH 054/118] Add missing getter for color filter --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 8e1e0b2..5e011ef 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -250,6 +250,11 @@ public void setColorFilter(ColorFilter cf) { invalidate(); } + @Override + public ColorFilter getColorFilter() { + return mColorFilter; + } + private void applyColorFilter() { if (mBitmapPaint != null) { mBitmapPaint.setColorFilter(mColorFilter); From ec75ff77607c5a5f340141bc3bcae662f1a68d80 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 29 Apr 2016 17:31:15 +0200 Subject: [PATCH 055/118] Update gradle plugin, build tools and support lib to latest versions --- build.gradle | 2 +- circleimageview/build.gradle | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 18108df..fb07616 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.0.0' + classpath 'com.android.tools.build:gradle:2.1.0' } } diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index ea9b66b..a83a99c 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' android { compileSdkVersion 23 - buildToolsVersion '23.0.2' + buildToolsVersion '23.0.3' defaultConfig { minSdkVersion 8 @@ -11,7 +11,7 @@ android { } dependencies { - provided 'com.android.support:support-annotations:23.1.1' + provided 'com.android.support:support-annotations:23.3.0' } apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle' \ No newline at end of file From af3982c2acf94b150cd1eaf7720d14476f6f167d Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 29 Apr 2016 17:46:19 +0200 Subject: [PATCH 056/118] Add option to disable circular transformation; #111 --- .../circleimageview/CircleImageView.java | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 5e011ef..24b08ff 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -73,6 +73,7 @@ public class CircleImageView extends ImageView { private boolean mReady; private boolean mSetupPending; private boolean mBorderOverlay; + private boolean mDisableCircularTransformation; public CircleImageView(Context context) { super(context); @@ -130,6 +131,11 @@ public void setAdjustViewBounds(boolean adjustViewBounds) { @Override protected void onDraw(Canvas canvas) { + if (mDisableCircularTransformation) { + super.onDraw(canvas); + return; + } + if (mBitmap == null) { return; } @@ -211,32 +217,41 @@ public void setBorderOverlay(boolean borderOverlay) { setup(); } + public boolean isDisableCircularTransformation() { + return mDisableCircularTransformation; + } + + public void setDisableCircularTransformation(boolean disableCircularTransformation) { + if (mDisableCircularTransformation == disableCircularTransformation) { + return; + } + + mDisableCircularTransformation = disableCircularTransformation; + initializeBitmap(); + } + @Override public void setImageBitmap(Bitmap bm) { super.setImageBitmap(bm); - mBitmap = bm; - setup(); + initializeBitmap(); } @Override public void setImageDrawable(Drawable drawable) { super.setImageDrawable(drawable); - mBitmap = getBitmapFromDrawable(drawable); - setup(); + initializeBitmap(); } @Override public void setImageResource(@DrawableRes int resId) { super.setImageResource(resId); - mBitmap = getBitmapFromDrawable(getDrawable()); - setup(); + initializeBitmap(); } @Override public void setImageURI(Uri uri) { super.setImageURI(uri); - mBitmap = uri != null ? getBitmapFromDrawable(getDrawable()) : null; - setup(); + initializeBitmap(); } @Override @@ -289,6 +304,15 @@ private Bitmap getBitmapFromDrawable(Drawable drawable) { } } + private void initializeBitmap() { + if (mDisableCircularTransformation) { + mBitmap = null; + } else { + mBitmap = getBitmapFromDrawable(getDrawable()); + } + setup(); + } + private void setup() { if (!mReady) { mSetupPending = true; From d3ced7d5e3a2651e3b1a1afa1b0723cf7b855166 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 29 Apr 2016 19:05:18 +0200 Subject: [PATCH 057/118] Add support for padding --- .../circleimageview/CircleImageView.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 24b08ff..4fb1769 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -141,11 +141,11 @@ protected void onDraw(Canvas canvas) { } if (mFillColor != Color.TRANSPARENT) { - canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mDrawableRadius, mFillPaint); + canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mFillPaint); } - canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mDrawableRadius, mBitmapPaint); + canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mBitmapPaint); if (mBorderWidth != 0) { - canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mBorderRadius, mBorderPaint); + canvas.drawCircle(mBorderRect.centerX(), mBorderRect.centerY(), mBorderRadius, mBorderPaint); } } @@ -345,7 +345,7 @@ private void setup() { mBitmapHeight = mBitmap.getHeight(); mBitmapWidth = mBitmap.getWidth(); - mBorderRect.set(0, 0, getWidth(), getHeight()); + mBorderRect.set(calculateBounds()); mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2.0f, (mBorderRect.width() - mBorderWidth) / 2.0f); mDrawableRect.set(mBorderRect); @@ -359,6 +359,18 @@ private void setup() { invalidate(); } + private RectF calculateBounds() { + int availableWidth = getWidth() - getPaddingLeft() - getPaddingRight(); + int availableHeight = getHeight() - getPaddingTop() - getPaddingBottom(); + + int sideLength = Math.min(availableWidth, availableHeight); + + float left = getPaddingLeft() + (availableWidth - sideLength) / 2f; + float top = getPaddingTop() + (availableHeight - sideLength) / 2f; + + return new RectF(left, top, left + sideLength, top + sideLength); + } + private void updateShaderMatrix() { float scale; float dx = 0; From 661381f39b72aba22ce7bd9d71ee523e4fcf7c77 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 1 May 2016 17:51:38 +0200 Subject: [PATCH 058/118] Next version is 2.1.0 --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index b283d0b..ee3a16c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=2.0.1-SNAPSHOT +VERSION_NAME=2.1.0-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android @@ -10,4 +10,4 @@ POM_LICENCE_NAME=The Apache Software License, Version 2.0 POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt POM_LICENCE_DIST=repo POM_DEVELOPER_ID=hdodenhof -POM_DEVELOPER_NAME=Henning Dodenhof \ No newline at end of file +POM_DEVELOPER_NAME=Henning Dodenhof From 3e607323d01e21e5c063b03708802a9aad2a01e4 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 16 May 2016 15:31:48 +0200 Subject: [PATCH 059/118] Deprecate fillColor and add some Javadoc explaining the current behaviour --- .../circleimageview/CircleImageView.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 4fb1769..cd99973 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -173,10 +173,27 @@ public void setBorderColorResource(@ColorRes int borderColorRes) { setBorderColor(getContext().getResources().getColor(borderColorRes)); } + /** + * Return the color drawn behind the circle-shaped drawable. + * + * @return The color drawn behind the drawable + * + * @deprecated Fill color support is going to be removed in the future + */ + @Deprecated public int getFillColor() { return mFillColor; } + /** + * Set a color to be drawn behind the circle-shaped drawable. Note that + * this has no effect if the drawable is opaque or no drawable is set. + * + * @param fillColor The color to be drawn behind the drawable + * + * @deprecated Fill color support is going to be removed in the future + */ + @Deprecated public void setFillColor(@ColorInt int fillColor) { if (fillColor == mFillColor) { return; @@ -187,6 +204,16 @@ public void setFillColor(@ColorInt int fillColor) { invalidate(); } + /** + * Set a color to be drawn behind the circle-shaped drawable. Note that + * this has no effect if the drawable is opaque or no drawable is set. + * + * @param fillColorRes The color resource to be resolved to a color and + * drawn behind the drawable + * + * @deprecated Fill color support is going to be removed in the future + */ + @Deprecated public void setFillColorResource(@ColorRes int fillColorRes) { setFillColor(getContext().getResources().getColor(fillColorRes)); } From d2cc96be774516b0d6711df4f7390d4b063298a0 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 16 May 2016 16:12:30 +0200 Subject: [PATCH 060/118] Deprecate setBorderColorResource --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index cd99973..03f0ae8 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -169,6 +169,10 @@ public void setBorderColor(@ColorInt int borderColor) { invalidate(); } + /** + * @deprecated Use {@link #setBorderColor(int)} instead + */ + @Deprecated public void setBorderColorResource(@ColorRes int borderColorRes) { setBorderColor(getContext().getResources().getColor(borderColorRes)); } From 7b9e2fc8b0061273a47e2b9166b3661a40a78cd4 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 16 May 2016 17:20:04 +0200 Subject: [PATCH 061/118] Let border overlap image by 1px to avoid a hairline gap caused by antialising; resolves #131 --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 03f0ae8..3216c16 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -380,8 +380,8 @@ private void setup() { mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2.0f, (mBorderRect.width() - mBorderWidth) / 2.0f); mDrawableRect.set(mBorderRect); - if (!mBorderOverlay) { - mDrawableRect.inset(mBorderWidth, mBorderWidth); + if (!mBorderOverlay && mBorderWidth > 0) { + mDrawableRect.inset(mBorderWidth - 1.0f, mBorderWidth - 1.0f); } mDrawableRadius = Math.min(mDrawableRect.height() / 2.0f, mDrawableRect.width() / 2.0f); From f98b11c3867b5ad28b66717e6149fe4e86fe6f8b Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 16 May 2016 17:23:35 +0200 Subject: [PATCH 062/118] Tweak border drawing condition --- .../main/java/de/hdodenhof/circleimageview/CircleImageView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 3216c16..39cf234 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -144,7 +144,7 @@ protected void onDraw(Canvas canvas) { canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mFillPaint); } canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mBitmapPaint); - if (mBorderWidth != 0) { + if (mBorderWidth > 0) { canvas.drawCircle(mBorderRect.centerX(), mBorderRect.centerY(), mBorderRadius, mBorderPaint); } } From b9db84fbfa62ec65d403ebd8456ed8c129b11d7e Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 3 Jul 2016 18:46:13 +0200 Subject: [PATCH 063/118] Handle programmatic change of padding properly --- .../hdodenhof/circleimageview/CircleImageView.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 39cf234..e2a87ee 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -155,6 +155,18 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) { setup(); } + @Override + public void setPadding(int left, int top, int right, int bottom) { + super.setPadding(left, top, right, bottom); + setup(); + } + + @Override + public void setPaddingRelative(int start, int top, int end, int bottom) { + super.setPaddingRelative(start, top, end, bottom); + setup(); + } + public int getBorderColor() { return mBorderColor; } From 354575cc3cf92dbe22084ad66abdf8894afc7825 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 3 Jul 2016 18:47:24 +0200 Subject: [PATCH 064/118] Update copyright date range --- README.md | 2 +- .../main/java/de/hdodenhof/circleimageview/CircleImageView.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c7431eb..f32b813 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ Changelog License ------- - Copyright 2014 - 2015 Henning Dodenhof + Copyright 2014 - 2016 Henning Dodenhof Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index e2a87ee..f1927ff 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2015 Henning Dodenhof + * Copyright 2014 - 2016 Henning Dodenhof * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 5186ac1b0a3f24ac65376b3c0a90ee01549201cb Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 3 Jul 2016 18:58:44 +0200 Subject: [PATCH 065/118] Prepare release v2.1.0 --- README.md | 8 +++++++- gradle.properties | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f32b813..5a0f2a7 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Gradle ``` dependencies { ... - compile 'de.hdodenhof:circleimageview:2.0.0' + compile 'de.hdodenhof:circleimageview:2.1.0' } ``` @@ -43,6 +43,12 @@ Limitations Changelog --------- +* **2.1.0** + * Add support for padding + * Add option to disable circular transformation + * Fix hairline gap being drawn between image and border under some conditions + * Fix NPE when using tint attribute (which is not supported) + * Deprecate fill color as it seems to cause quite some confusion * **2.0.0** * BREAKING: Custom xml attributes are now prefixed with "civ_" * Graceful handling of incompatible drawables diff --git a/gradle.properties b/gradle.properties index ee3a16c..1c6e5bb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=2.1.0-SNAPSHOT +VERSION_NAME=2.1.0 GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 86560980639500ae54361a9d5e582d8ee24214b6 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 3 Jul 2016 19:18:19 +0200 Subject: [PATCH 066/118] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 1c6e5bb..b2f138e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=2.1.0 +VERSION_NAME=2.1.1-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From d67ba43fa47ff30fee581e95614a61c4b1d55ceb Mon Sep 17 00:00:00 2001 From: Lucas Candalo Date: Mon, 16 Jan 2017 15:22:31 -0200 Subject: [PATCH 067/118] Update copyright date range Signed-off-by: Lucas Candalo --- README.md | 2 +- .../main/java/de/hdodenhof/circleimageview/CircleImageView.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5a0f2a7..66c61e5 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ Changelog License ------- - Copyright 2014 - 2016 Henning Dodenhof + Copyright 2014 - 2017 Henning Dodenhof Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index f1927ff..3612019 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2016 Henning Dodenhof + * Copyright 2014 - 2017 Henning Dodenhof * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 7fd3573507e345da6d7a295c763f55afc852b481 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 12 Mar 2017 16:43:20 +0100 Subject: [PATCH 068/118] Update all the dependencies --- build.gradle | 2 +- circleimageview/build.gradle | 8 ++++---- gradle/wrapper/gradle-wrapper.properties | 3 ++- sample/build.gradle | 6 +++--- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index fb07616..0386312 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.android.tools.build:gradle:2.3.0' } } diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index a83a99c..a2f2dea 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -1,17 +1,17 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 23 - buildToolsVersion '23.0.3' + compileSdkVersion 25 + buildToolsVersion '25.0.2' defaultConfig { minSdkVersion 8 - targetSdkVersion 23 + targetSdkVersion 25 } } dependencies { - provided 'com.android.support:support-annotations:23.3.0' + provided 'com.android.support:support-annotations:25.2.0' } apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle' \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9851e51..4bbe3b7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Sun Mar 12 16:31:51 CET 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 781c824..8751439 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 - buildToolsVersion '23.0.3' + compileSdkVersion 25 + buildToolsVersion '25.0.2' defaultConfig { minSdkVersion 8 - targetSdkVersion 23 + targetSdkVersion 25 } } From f6c348c669e34b61b8c1cb8c0b8520cf6c37297c Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 29 Sep 2017 10:55:50 +0200 Subject: [PATCH 069/118] Bump targetSdk to 26; update build deps to latest versions --- build.gradle | 8 +++++--- circleimageview/build.gradle | 8 ++++---- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/build.gradle | 6 +++--- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/build.gradle b/build.gradle index 0386312..5a64852 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,11 @@ buildscript { repositories { - mavenCentral() + jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:3.0.0-beta6' } } @@ -13,6 +14,7 @@ allprojects { group = GROUP repositories { - mavenCentral() + jcenter() + google() } } \ No newline at end of file diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index a2f2dea..796806e 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -1,17 +1,17 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion '25.0.2' + compileSdkVersion 26 + buildToolsVersion '26.0.1' defaultConfig { minSdkVersion 8 - targetSdkVersion 25 + targetSdkVersion 26 } } dependencies { - provided 'com.android.support:support-annotations:25.2.0' + provided 'com.android.support:support-annotations:26.1.0' } apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle' \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4bbe3b7..294a2c3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Mar 12 16:31:51 CET 2017 +#Fri Sep 29 10:49:45 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 8751439..01fc173 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 - buildToolsVersion '25.0.2' + compileSdkVersion 26 + buildToolsVersion '26.0.1' defaultConfig { minSdkVersion 8 - targetSdkVersion 25 + targetSdkVersion 26 } } From 8c7f69e88dbdb5d94ec16bf0edd30446584fa7e9 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 29 Apr 2016 17:46:19 +0200 Subject: [PATCH 070/118] Rename fillColor to circleBackgroundColor --- .../circleimageview/CircleImageView.java | 62 ++++++++++++------- circleimageview/src/main/res/values/attrs.xml | 2 + 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 3612019..ba8e0f8 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -45,7 +45,7 @@ public class CircleImageView extends ImageView { private static final int DEFAULT_BORDER_WIDTH = 0; private static final int DEFAULT_BORDER_COLOR = Color.BLACK; - private static final int DEFAULT_FILL_COLOR = Color.TRANSPARENT; + private static final int DEFAULT_CIRCLE_BACKGROUND_COLOR = Color.TRANSPARENT; private static final boolean DEFAULT_BORDER_OVERLAY = false; private final RectF mDrawableRect = new RectF(); @@ -54,11 +54,11 @@ public class CircleImageView extends ImageView { private final Matrix mShaderMatrix = new Matrix(); private final Paint mBitmapPaint = new Paint(); private final Paint mBorderPaint = new Paint(); - private final Paint mFillPaint = new Paint(); + private final Paint mCircleBackgroundPaint = new Paint(); private int mBorderColor = DEFAULT_BORDER_COLOR; private int mBorderWidth = DEFAULT_BORDER_WIDTH; - private int mFillColor = DEFAULT_FILL_COLOR; + private int mCircleBackgroundColor = DEFAULT_CIRCLE_BACKGROUND_COLOR; private Bitmap mBitmap; private BitmapShader mBitmapShader; @@ -93,7 +93,15 @@ public CircleImageView(Context context, AttributeSet attrs, int defStyle) { mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_civ_border_width, DEFAULT_BORDER_WIDTH); mBorderColor = a.getColor(R.styleable.CircleImageView_civ_border_color, DEFAULT_BORDER_COLOR); mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_civ_border_overlay, DEFAULT_BORDER_OVERLAY); - mFillColor = a.getColor(R.styleable.CircleImageView_civ_fill_color, DEFAULT_FILL_COLOR); + + // Look for deprecated civ_fill_color if civ_circle_background_color is not set + if (a.hasValue(R.styleable.CircleImageView_civ_circle_background_color)) { + mCircleBackgroundColor = a.getColor(R.styleable.CircleImageView_civ_circle_background_color, + DEFAULT_CIRCLE_BACKGROUND_COLOR); + } else if (a.hasValue(R.styleable.CircleImageView_civ_fill_color)) { + mCircleBackgroundColor = a.getColor(R.styleable.CircleImageView_civ_fill_color, + DEFAULT_CIRCLE_BACKGROUND_COLOR); + } a.recycle(); @@ -140,8 +148,8 @@ protected void onDraw(Canvas canvas) { return; } - if (mFillColor != Color.TRANSPARENT) { - canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mFillPaint); + if (mCircleBackgroundColor != Color.TRANSPARENT) { + canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mCircleBackgroundPaint); } canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mBitmapPaint); if (mBorderWidth > 0) { @@ -189,16 +197,34 @@ public void setBorderColorResource(@ColorRes int borderColorRes) { setBorderColor(getContext().getResources().getColor(borderColorRes)); } + public int getCircleBackgroundColor() { + return mCircleBackgroundColor; + } + + public void setCircleBackgroundColor(@ColorInt int circleBackgroundColor) { + if (circleBackgroundColor == mCircleBackgroundColor) { + return; + } + + mCircleBackgroundColor = circleBackgroundColor; + mCircleBackgroundPaint.setColor(circleBackgroundColor); + invalidate(); + } + + public void setCircleBackgroundColorResource(@ColorRes int circleBackgroundRes) { + setCircleBackgroundColor(getContext().getResources().getColor(circleBackgroundRes)); + } + /** * Return the color drawn behind the circle-shaped drawable. * * @return The color drawn behind the drawable * - * @deprecated Fill color support is going to be removed in the future + * @deprecated Use {@link #getCircleBackgroundColor()} instead. */ @Deprecated public int getFillColor() { - return mFillColor; + return getCircleBackgroundColor(); } /** @@ -207,17 +233,11 @@ public int getFillColor() { * * @param fillColor The color to be drawn behind the drawable * - * @deprecated Fill color support is going to be removed in the future + * @deprecated Use {@link #setCircleBackgroundColor(int)} instead. */ @Deprecated public void setFillColor(@ColorInt int fillColor) { - if (fillColor == mFillColor) { - return; - } - - mFillColor = fillColor; - mFillPaint.setColor(fillColor); - invalidate(); + setCircleBackgroundColor(fillColor); } /** @@ -227,11 +247,11 @@ public void setFillColor(@ColorInt int fillColor) { * @param fillColorRes The color resource to be resolved to a color and * drawn behind the drawable * - * @deprecated Fill color support is going to be removed in the future + * @deprecated Use {@link #setCircleBackgroundColorResource(int)} instead. */ @Deprecated public void setFillColorResource(@ColorRes int fillColorRes) { - setFillColor(getContext().getResources().getColor(fillColorRes)); + setCircleBackgroundColorResource(fillColorRes); } public int getBorderWidth() { @@ -381,9 +401,9 @@ private void setup() { mBorderPaint.setColor(mBorderColor); mBorderPaint.setStrokeWidth(mBorderWidth); - mFillPaint.setStyle(Paint.Style.FILL); - mFillPaint.setAntiAlias(true); - mFillPaint.setColor(mFillColor); + mCircleBackgroundPaint.setStyle(Paint.Style.FILL); + mCircleBackgroundPaint.setAntiAlias(true); + mCircleBackgroundPaint.setColor(mCircleBackgroundColor); mBitmapHeight = mBitmap.getHeight(); mBitmapWidth = mBitmap.getWidth(); diff --git a/circleimageview/src/main/res/values/attrs.xml b/circleimageview/src/main/res/values/attrs.xml index ab6c430..16aff53 100644 --- a/circleimageview/src/main/res/values/attrs.xml +++ b/circleimageview/src/main/res/values/attrs.xml @@ -4,6 +4,8 @@ + + From b271832117627294d5029b4e69ddd9300d300857 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 13 Mar 2017 08:18:42 +0100 Subject: [PATCH 071/118] Add custom outline provider to support elevation --- .../circleimageview/CircleImageView.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index ba8e0f8..6eb3b0d 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -23,17 +23,23 @@ import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Matrix; +import android.graphics.Outline; import android.graphics.Paint; +import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.os.Build; import android.support.annotation.ColorInt; import android.support.annotation.ColorRes; import android.support.annotation.DrawableRes; +import android.support.annotation.RequiresApi; import android.util.AttributeSet; +import android.view.View; +import android.view.ViewOutlineProvider; import android.widget.ImageView; public class CircleImageView extends ImageView { @@ -112,6 +118,10 @@ private void init() { super.setScaleType(SCALE_TYPE); mReady = true; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + setOutlineProvider(new OutlineProvider()); + } + if (mSetupPending) { setup(); mSetupPending = false; @@ -455,4 +465,16 @@ private void updateShaderMatrix() { mBitmapShader.setLocalMatrix(mShaderMatrix); } + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + private class OutlineProvider extends ViewOutlineProvider { + + @Override + public void getOutline(View view, Outline outline) { + Rect bounds = new Rect(); + mBorderRect.roundOut(bounds); + outline.setRoundRect(bounds, bounds.width() / 2.0f); + } + + } + } From 1b5424662e34fd75199ff450c04d6e2fda258dcc Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 29 Sep 2017 16:47:40 +0200 Subject: [PATCH 072/118] Add FAQ section to README --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index 66c61e5..5bd5492 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,24 @@ Limitations * If you use an image loading library like Picasso or Glide, you need to disable their fade animations to avoid messed up images. For Picasso use the `noFade()` option, for Glide use `dontAnimate()`. If you want to keep the fadeIn animation, you have to fetch the image into a `Target` and apply a custom animation yourself when receiving the `Bitmap`. * Using a `TransitionDrawable` with `CircleImageView` doesn't work properly and leads to messed up images. +FAQ +--- +**How can I use a `VectorDrawable` with `CircleImageView`?** + +Short answer: you shouldn't. Using a `VectorDrawable` with `CircleImageView` is very inefficient. You should modify your vectors to be in a circular shape and use them with a regular ImageView instead. + +**Why doesn't `CircleImageView` extend `AppCompatImageView`?** + +Extending `AppCompatImageView` would require adding a runtime dependency for the support library without any real benefit. + +**How can I add a selector (e.g. ripple effect) bound to a circle?** + +There's currently no direct support for a circle bound selector but you can follow [these steps](https://github.com/hdodenhof/CircleImageView/issues/153#issuecomment-249692049) to implement it yourself. + +**How can I add a gap between image and border?** + +Adding a gap is also not support directly but [there's a workaround](https://github.com/hdodenhof/CircleImageView/issues/133#issuecomment-225437930). + Changelog --------- * **2.1.0** From d03e825c2b0a02f883f95cbcb8bb7ef371a36564 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 29 Sep 2017 17:55:06 +0200 Subject: [PATCH 073/118] Add 'next' section to changelog --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 5bd5492..1c5652c 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,9 @@ Adding a gap is also not support directly but [there's a workaround](https://git Changelog --------- +* **next** + * Add support for elevation + * Add circle background color attribute to replace fill color * **2.1.0** * Add support for padding * Add option to disable circular transformation From 586c31f9e3718958ef76b410d92ea87f75dd4324 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sat, 30 Sep 2017 12:11:05 +0200 Subject: [PATCH 074/118] Next version is 2.2.0 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b2f138e..55dc4a9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=2.1.1-SNAPSHOT +VERSION_NAME=2.2.0-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From cc6f3809d941b3d7413be4bd215c2f39e5e227e1 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Tue, 10 Oct 2017 15:58:37 +0200 Subject: [PATCH 075/118] Prepare release v2.2.0 --- README.md | 4 ++-- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1c5652c..f126c86 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Gradle ``` dependencies { ... - compile 'de.hdodenhof:circleimageview:2.1.0' + compile 'de.hdodenhof:circleimageview:2.2.0' } ``` @@ -61,7 +61,7 @@ Adding a gap is also not support directly but [there's a workaround](https://git Changelog --------- -* **next** +* **2.2.0** * Add support for elevation * Add circle background color attribute to replace fill color * **2.1.0** diff --git a/gradle.properties b/gradle.properties index 55dc4a9..aa204a0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=2.2.0-SNAPSHOT +VERSION_NAME=2.2.0 GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 0e23ac2269c6451e6ba7f3d0ba214d9f45afa70f Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Tue, 10 Oct 2017 15:59:29 +0200 Subject: [PATCH 076/118] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index aa204a0..e2abcae 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=2.2.0 +VERSION_NAME=2.2.1-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 39164372e2f5d39a1eecfd257f5db5158c30ad06 Mon Sep 17 00:00:00 2001 From: Job Getabu Date: Thu, 22 Mar 2018 12:34:15 +0300 Subject: [PATCH 077/118] efficient gradle import with :implementation no leaking of dependencies, faster parallel builds --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f126c86..82b29bc 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Gradle dependencies { ... compile 'de.hdodenhof:circleimageview:2.2.0' + //or + implementation 'de.hdodenhof:circleimageview:2.2.0' } ``` From 53925bcf7d7a6ccecdaafae276a8326ea2c14aaa Mon Sep 17 00:00:00 2001 From: caleb Date: Fri, 30 Mar 2018 13:43:57 -0600 Subject: [PATCH 078/118] bump sdk and support lib versions --- build.gradle | 2 +- circleimageview/build.gradle | 8 ++++---- sample/build.gradle | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 5a64852..5161f0e 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-beta6' + classpath 'com.android.tools.build:gradle:3.0.1' } } diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index 796806e..0eadc2e 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -1,17 +1,17 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 26 - buildToolsVersion '26.0.1' + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { minSdkVersion 8 - targetSdkVersion 26 + targetSdkVersion 27 } } dependencies { - provided 'com.android.support:support-annotations:26.1.0' + provided 'com.android.support:support-annotations:27.1.0' } apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle' \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle index 01fc173..1220721 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 26 - buildToolsVersion '26.0.1' + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { minSdkVersion 8 - targetSdkVersion 26 + targetSdkVersion 27 } } From edd7aefd5bb7f40706704164cc6d502a2537ce12 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 2 Apr 2018 13:55:58 +0200 Subject: [PATCH 079/118] Update Gradle to 4.4, Android plugin to 3.1.0 --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 5161f0e..63349f8 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.1.0' } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 294a2c3..cf8da48 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Sep 29 10:49:45 CEST 2017 +#Mon Apr 02 13:45:46 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip From 8e9adbfeb100b0c513895306260b7056afea38ce Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 2 Apr 2018 13:57:28 +0200 Subject: [PATCH 080/118] Switch to new dependency configurations --- README.md | 2 -- circleimageview/build.gradle | 2 +- sample/build.gradle | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 82b29bc..cf2960b 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,6 @@ Gradle ``` dependencies { ... - compile 'de.hdodenhof:circleimageview:2.2.0' - //or implementation 'de.hdodenhof:circleimageview:2.2.0' } ``` diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index 0eadc2e..75336ad 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -11,7 +11,7 @@ android { } dependencies { - provided 'com.android.support:support-annotations:27.1.0' + compileOnly 'com.android.support:support-annotations:27.1.0' } apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle' \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle index 1220721..f3688a8 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -11,5 +11,5 @@ android { } dependencies { - compile project(':circleimageview') + implementation project(':circleimageview') } \ No newline at end of file From e14b38a8a742e8f7f3d816db0b76910e0c7bb0f5 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 2 Apr 2018 13:59:08 +0200 Subject: [PATCH 081/118] Update copyright date range --- README.md | 2 +- .../main/java/de/hdodenhof/circleimageview/CircleImageView.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cf2960b..2229ed7 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ Changelog License ------- - Copyright 2014 - 2017 Henning Dodenhof + Copyright 2014 - 2018 Henning Dodenhof Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 6eb3b0d..3c1778d 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2017 Henning Dodenhof + * Copyright 2014 - 2018 Henning Dodenhof * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From e9ce455fdd2cceed5d5dab2a1fc7216deb7d2b37 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Tue, 5 Jun 2018 21:22:52 +0200 Subject: [PATCH 082/118] Limit touch event handling to circle area --- README.md | 2 ++ .../de/hdodenhof/circleimageview/CircleImageView.java | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/README.md b/README.md index 2229ed7..c30820d 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,8 @@ Adding a gap is also not support directly but [there's a workaround](https://git Changelog --------- +* **next** + * Limit touch event handling to circle area * **2.2.0** * Add support for elevation * Add circle background color attribute to replace fill color diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 3c1778d..0dbb915 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -38,6 +38,7 @@ import android.support.annotation.DrawableRes; import android.support.annotation.RequiresApi; import android.util.AttributeSet; +import android.view.MotionEvent; import android.view.View; import android.view.ViewOutlineProvider; import android.widget.ImageView; @@ -465,6 +466,15 @@ private void updateShaderMatrix() { mBitmapShader.setLocalMatrix(mShaderMatrix); } + @Override + public boolean onTouchEvent(MotionEvent event) { + return inTouchableArea(event.getX(), event.getY()) && super.onTouchEvent(event); + } + + private boolean inTouchableArea(float x, float y) { + return Math.pow(x - mBorderRect.centerX(), 2) + Math.pow(y - mBorderRect.centerY(), 2) <= Math.pow(mBorderRadius, 2); + } + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) private class OutlineProvider extends ViewOutlineProvider { From 0eaf7bb4e99629b6ca0d10b26f124729d111dfe1 Mon Sep 17 00:00:00 2001 From: Keita Watanabe Date: Thu, 27 Sep 2018 11:24:38 +0900 Subject: [PATCH 083/118] Update all the things; migrate to AndroidX --- README.md | 1 + build.gradle | 2 +- circleimageview/build.gradle | 8 ++++---- .../de/hdodenhof/circleimageview/CircleImageView.java | 8 ++++---- gradle.properties | 3 +++ gradle/wrapper/gradle-wrapper.properties | 2 +- sample/build.gradle | 6 +++--- 7 files changed, 17 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index c30820d..be5aad8 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ Changelog --------- * **next** * Limit touch event handling to circle area + * Migrate to AndroidX * **2.2.0** * Add support for elevation * Add circle background color attribute to replace fill color diff --git a/build.gradle b/build.gradle index 63349f8..207e93e 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.1.0' + classpath 'com.android.tools.build:gradle:3.2.1' } } diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index 75336ad..503f7a1 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -1,17 +1,17 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 27 - buildToolsVersion '27.0.3' + compileSdkVersion 28 + buildToolsVersion '28.0.3' defaultConfig { minSdkVersion 8 - targetSdkVersion 27 + targetSdkVersion 28 } } dependencies { - compileOnly 'com.android.support:support-annotations:27.1.0' + compileOnly 'androidx.annotation:annotation:1.0.1' } apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle' \ No newline at end of file diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 0dbb915..471ae53 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -33,15 +33,15 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; -import android.support.annotation.ColorInt; -import android.support.annotation.ColorRes; -import android.support.annotation.DrawableRes; -import android.support.annotation.RequiresApi; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewOutlineProvider; import android.widget.ImageView; +import androidx.annotation.ColorInt; +import androidx.annotation.ColorRes; +import androidx.annotation.DrawableRes; +import androidx.annotation.RequiresApi; public class CircleImageView extends ImageView { diff --git a/gradle.properties b/gradle.properties index e2abcae..85e453f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,3 +11,6 @@ POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt POM_LICENCE_DIST=repo POM_DEVELOPER_ID=hdodenhof POM_DEVELOPER_NAME=Henning Dodenhof + +android.useAndroidX=true +android.enableJetifier=false diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cf8da48..ea03a2d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index f3688a8..53ad3aa 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 27 - buildToolsVersion '27.0.3' + compileSdkVersion 28 + buildToolsVersion '28.0.3' defaultConfig { minSdkVersion 8 - targetSdkVersion 27 + targetSdkVersion 28 } } From a2ff0a2d6b04c09b8533bd8133cdd9b330718d5b Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Thu, 3 Jan 2019 21:17:26 +0100 Subject: [PATCH 084/118] Update copyright date range to include 2019 --- README.md | 2 +- .../main/java/de/hdodenhof/circleimageview/CircleImageView.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index be5aad8..faba684 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ Changelog License ------- - Copyright 2014 - 2018 Henning Dodenhof + Copyright 2014 - 2019 Henning Dodenhof Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 471ae53..2feff14 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2018 Henning Dodenhof + * Copyright 2014 - 2019 Henning Dodenhof * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 2e7d1ff009d8bd34a8e35d16e9f44ef994b4d3d0 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 6 Jan 2019 11:47:54 +0100 Subject: [PATCH 085/118] Next version is 3.0.0 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 85e453f..98ff032 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=2.2.1-SNAPSHOT +VERSION_NAME=3.0.0-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 4676cd5a28c28af4f2c4bd2e82f7ce4c25a7f8a1 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 6 Jan 2019 11:48:06 +0100 Subject: [PATCH 086/118] Remove deprecated properties and methods --- README.md | 1 + .../circleimageview/CircleImageView.java | 57 +------------------ circleimageview/src/main/res/values/attrs.xml | 2 - 3 files changed, 2 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index faba684..2337b26 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ Changelog * **next** * Limit touch event handling to circle area * Migrate to AndroidX + * Remove deprecated properties and methods * **2.2.0** * Add support for elevation * Add circle background color attribute to replace fill color diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 2feff14..a541132 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -100,15 +100,7 @@ public CircleImageView(Context context, AttributeSet attrs, int defStyle) { mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_civ_border_width, DEFAULT_BORDER_WIDTH); mBorderColor = a.getColor(R.styleable.CircleImageView_civ_border_color, DEFAULT_BORDER_COLOR); mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_civ_border_overlay, DEFAULT_BORDER_OVERLAY); - - // Look for deprecated civ_fill_color if civ_circle_background_color is not set - if (a.hasValue(R.styleable.CircleImageView_civ_circle_background_color)) { - mCircleBackgroundColor = a.getColor(R.styleable.CircleImageView_civ_circle_background_color, - DEFAULT_CIRCLE_BACKGROUND_COLOR); - } else if (a.hasValue(R.styleable.CircleImageView_civ_fill_color)) { - mCircleBackgroundColor = a.getColor(R.styleable.CircleImageView_civ_fill_color, - DEFAULT_CIRCLE_BACKGROUND_COLOR); - } + mCircleBackgroundColor = a.getColor(R.styleable.CircleImageView_civ_circle_background_color, DEFAULT_CIRCLE_BACKGROUND_COLOR); a.recycle(); @@ -200,14 +192,6 @@ public void setBorderColor(@ColorInt int borderColor) { invalidate(); } - /** - * @deprecated Use {@link #setBorderColor(int)} instead - */ - @Deprecated - public void setBorderColorResource(@ColorRes int borderColorRes) { - setBorderColor(getContext().getResources().getColor(borderColorRes)); - } - public int getCircleBackgroundColor() { return mCircleBackgroundColor; } @@ -226,45 +210,6 @@ public void setCircleBackgroundColorResource(@ColorRes int circleBackgroundRes) setCircleBackgroundColor(getContext().getResources().getColor(circleBackgroundRes)); } - /** - * Return the color drawn behind the circle-shaped drawable. - * - * @return The color drawn behind the drawable - * - * @deprecated Use {@link #getCircleBackgroundColor()} instead. - */ - @Deprecated - public int getFillColor() { - return getCircleBackgroundColor(); - } - - /** - * Set a color to be drawn behind the circle-shaped drawable. Note that - * this has no effect if the drawable is opaque or no drawable is set. - * - * @param fillColor The color to be drawn behind the drawable - * - * @deprecated Use {@link #setCircleBackgroundColor(int)} instead. - */ - @Deprecated - public void setFillColor(@ColorInt int fillColor) { - setCircleBackgroundColor(fillColor); - } - - /** - * Set a color to be drawn behind the circle-shaped drawable. Note that - * this has no effect if the drawable is opaque or no drawable is set. - * - * @param fillColorRes The color resource to be resolved to a color and - * drawn behind the drawable - * - * @deprecated Use {@link #setCircleBackgroundColorResource(int)} instead. - */ - @Deprecated - public void setFillColorResource(@ColorRes int fillColorRes) { - setCircleBackgroundColorResource(fillColorRes); - } - public int getBorderWidth() { return mBorderWidth; } diff --git a/circleimageview/src/main/res/values/attrs.xml b/circleimageview/src/main/res/values/attrs.xml index 16aff53..bdfc2b1 100644 --- a/circleimageview/src/main/res/values/attrs.xml +++ b/circleimageview/src/main/res/values/attrs.xml @@ -4,8 +4,6 @@ - - From 528125cae927614a63ffc0b9314cd8b9fd6326fd Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 6 Jan 2019 11:54:07 +0100 Subject: [PATCH 087/118] Remove unnecessary null check --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index a541132..251a760 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -290,9 +290,7 @@ public ColorFilter getColorFilter() { } private void applyColorFilter() { - if (mBitmapPaint != null) { - mBitmapPaint.setColorFilter(mColorFilter); - } + mBitmapPaint.setColorFilter(mColorFilter); } private Bitmap getBitmapFromDrawable(Drawable drawable) { From d5a92b5315f8f5216c5ddf3c7d2ad94d2c9d5f19 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 6 Jan 2019 12:24:07 +0100 Subject: [PATCH 088/118] Suppress useless warnings in library --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 251a760..bd400cf 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -15,6 +15,7 @@ */ package de.hdodenhof.circleimageview; +import android.annotation.SuppressLint; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; @@ -43,6 +44,7 @@ import androidx.annotation.DrawableRes; import androidx.annotation.RequiresApi; +@SuppressWarnings("UnusedDeclaration") public class CircleImageView extends ImageView { private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP; @@ -409,6 +411,7 @@ private void updateShaderMatrix() { mBitmapShader.setLocalMatrix(mShaderMatrix); } + @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouchEvent(MotionEvent event) { return inTouchableArea(event.getX(), event.getY()) && super.onTouchEvent(event); From 930aeaf1ba4158bc4ff2dbe2f57bde32e3e4244c Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 6 Jan 2019 12:24:52 +0100 Subject: [PATCH 089/118] Fix warnings in sample app --- sample/build.gradle | 2 +- sample/src/main/AndroidManifest.xml | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/sample/build.gradle b/sample/build.gradle index 53ad3aa..0c7059d 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion '28.0.3' defaultConfig { - minSdkVersion 8 + minSdkVersion 14 targetSdkVersion 28 } } diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index ffe9dd1..74ca48e 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -1,12 +1,16 @@ - + android:theme="@style/AppTheme" + tools:ignore="GoogleAppIndexingWarning"> + @@ -16,6 +20,7 @@ + From 8a24219ffc7309f38f1c63f4e801802724066dcb Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 6 Jan 2019 12:49:32 +0100 Subject: [PATCH 090/118] Prepare release 3.0.0 --- README.md | 4 ++-- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2337b26..551f6d1 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Gradle ``` dependencies { ... - implementation 'de.hdodenhof:circleimageview:2.2.0' + implementation 'de.hdodenhof:circleimageview:3.0.0' } ``` @@ -61,7 +61,7 @@ Adding a gap is also not support directly but [there's a workaround](https://git Changelog --------- -* **next** +* **3.0.0** * Limit touch event handling to circle area * Migrate to AndroidX * Remove deprecated properties and methods diff --git a/gradle.properties b/gradle.properties index 98ff032..800dbb9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=3.0.0-SNAPSHOT +VERSION_NAME=3.0.0 GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 99bd20ea9497ef540d8f15fe5d5b33e7ebcf6685 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 6 Jan 2019 12:52:15 +0100 Subject: [PATCH 091/118] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 800dbb9..fa4c4a5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=3.0.0 +VERSION_NAME=3.1.0-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From e0e4384ed030afc0353998af676f2988eb9fea2a Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 26 Aug 2019 15:28:19 +0200 Subject: [PATCH 092/118] Fire touch event even if view is empty --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index bd400cf..80ee480 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -418,6 +418,10 @@ public boolean onTouchEvent(MotionEvent event) { } private boolean inTouchableArea(float x, float y) { + if (mBorderRect.isEmpty()) { + return true; + } + return Math.pow(x - mBorderRect.centerX(), 2) + Math.pow(y - mBorderRect.centerY(), 2) <= Math.pow(mBorderRadius, 2); } From c109651db74fcb94ed57ed85e721384ed6535d2b Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 26 Aug 2019 15:28:50 +0200 Subject: [PATCH 093/118] Don't limit touchable area to a circle if transformation is disabled --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 80ee480..6ec5b32 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -414,6 +414,10 @@ private void updateShaderMatrix() { @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouchEvent(MotionEvent event) { + if (mDisableCircularTransformation) { + return super.onTouchEvent(event); + } + return inTouchableArea(event.getX(), event.getY()) && super.onTouchEvent(event); } From 1482d9be1026ff0be56df07e1d32d05f94c0def0 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 26 Aug 2019 15:34:45 +0200 Subject: [PATCH 094/118] Prepare release 3.0.1 --- README.md | 5 ++++- gradle.properties | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 551f6d1..1036e41 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Gradle ``` dependencies { ... - implementation 'de.hdodenhof:circleimageview:3.0.0' + implementation 'de.hdodenhof:circleimageview:3.0.1' } ``` @@ -61,6 +61,9 @@ Adding a gap is also not support directly but [there's a workaround](https://git Changelog --------- +* **3.0.1** + * Fix touch event not fired if view is empty + * Fix touchable area limited to a circle even if transformation is disabled * **3.0.0** * Limit touch event handling to circle area * Migrate to AndroidX diff --git a/gradle.properties b/gradle.properties index fa4c4a5..da64f54 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=3.1.0-SNAPSHOT +VERSION_NAME=3.0.1 GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From a8aeeff9543f0fe1d1a786ccd0ea20da5ad6c8ec Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 26 Aug 2019 15:51:25 +0200 Subject: [PATCH 095/118] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index da64f54..fa4c4a5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=3.0.1 +VERSION_NAME=3.1.0-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From e593101e57ff543ab902c012e8915fb43a6b7e5c Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Mon, 26 Aug 2019 15:51:49 +0200 Subject: [PATCH 096/118] Update Gradle to 5.4.1, Android plugin to 3.5.0 --- build.gradle | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 207e93e..91206d4 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.2.1' + classpath 'com.android.tools.build:gradle:3.5.0' } } @@ -17,4 +17,4 @@ allprojects { jcenter() google() } -} \ No newline at end of file +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ea03a2d..98921f7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Apr 02 13:45:46 CEST 2018 +#Mon Aug 26 15:02:41 CEST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip From 3fef33b9fbd8df45a7c6134f50e2acbbecf75a0f Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Wed, 28 Aug 2019 11:44:09 +0200 Subject: [PATCH 097/118] Fall back to default outline provider if circular transformation is disabled --- .../de/hdodenhof/circleimageview/CircleImageView.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 6ec5b32..b8670bf 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -434,9 +434,13 @@ private class OutlineProvider extends ViewOutlineProvider { @Override public void getOutline(View view, Outline outline) { - Rect bounds = new Rect(); - mBorderRect.roundOut(bounds); - outline.setRoundRect(bounds, bounds.width() / 2.0f); + if (mDisableCircularTransformation) { + ViewOutlineProvider.BACKGROUND.getOutline(view, outline); + } else { + Rect bounds = new Rect(); + mBorderRect.roundOut(bounds); + outline.setRoundRect(bounds, bounds.width() / 2.0f); + } } } From 541f2e37e757a474f812d59e31bf86bc28be7116 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Wed, 1 Jan 2020 12:48:36 +0100 Subject: [PATCH 098/118] Update all the things --- build.gradle | 2 +- circleimageview/build.gradle | 8 ++++---- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/build.gradle | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 91206d4..2cfdd16 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:3.5.3' } } diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index 503f7a1..84b2ffd 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -1,17 +1,17 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 28 - buildToolsVersion '28.0.3' + compileSdkVersion 29 + buildToolsVersion '29.0.2' defaultConfig { minSdkVersion 8 - targetSdkVersion 28 + targetSdkVersion 29 } } dependencies { - compileOnly 'androidx.annotation:annotation:1.0.1' + compileOnly 'androidx.annotation:annotation:1.1.0' } apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle' \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 98921f7..d5e0f6f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Aug 26 15:02:41 CEST 2019 +#Wed Jan 01 12:46:55 CET 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 0c7059d..32f4c20 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 28 - buildToolsVersion '28.0.3' + compileSdkVersion 29 + buildToolsVersion '29.0.2' defaultConfig { minSdkVersion 14 - targetSdkVersion 28 + targetSdkVersion 29 } } From f03cd288f35a51a3ea854282fb483d8238559382 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Wed, 1 Jan 2020 12:53:03 +0100 Subject: [PATCH 099/118] Update copyright date range --- README.md | 2 +- .../main/java/de/hdodenhof/circleimageview/CircleImageView.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1036e41..66e7133 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ Changelog License ------- - Copyright 2014 - 2019 Henning Dodenhof + Copyright 2014 - 2020 Henning Dodenhof Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index b8670bf..c87254c 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2019 Henning Dodenhof + * Copyright 2014 - 2020 Henning Dodenhof * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 4b8cc02e2294f3711dbe273d2973d9f84d73718e Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Wed, 1 Jan 2020 14:45:09 +0100 Subject: [PATCH 100/118] Guard setting color filter by null check This fixes a regression introduced with 528125cae927614a63ffc0b9314cd8b9fd6326fd. Add comment to make sure the check stays this time. See #326 and #105. --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index c87254c..77f9917 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -291,8 +291,13 @@ public ColorFilter getColorFilter() { return mColorFilter; } + @SuppressWarnings("ConstantConditions") private void applyColorFilter() { - mBitmapPaint.setColorFilter(mColorFilter); + // This might be called from setColorFilter during ImageView construction + // before member initialization has finished on API level <= 19. + if (mBitmapPaint != null) { + mBitmapPaint.setColorFilter(mColorFilter); + } } private Bitmap getBitmapFromDrawable(Drawable drawable) { From 7a21bb07e0373a037ed1a19c0cdd4a2e0576b17d Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Wed, 1 Jan 2020 20:47:49 +0100 Subject: [PATCH 101/118] Add newline to end of files where missing --- circleimageview/build.gradle | 2 +- circleimageview/gradle.properties | 2 +- circleimageview/src/main/AndroidManifest.xml | 2 +- sample/build.gradle | 2 +- sample/proguard-rules.txt | 2 +- sample/src/main/res/values/colors.xml | 2 +- settings.gradle | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index 84b2ffd..de0a2f7 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -14,4 +14,4 @@ dependencies { compileOnly 'androidx.annotation:annotation:1.1.0' } -apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle' \ No newline at end of file +apply from: 'https://raw.github.com/hdodenhof/gradle-mvn-push/master/gradle-mvn-push.gradle' diff --git a/circleimageview/gradle.properties b/circleimageview/gradle.properties index aeb7191..657a307 100644 --- a/circleimageview/gradle.properties +++ b/circleimageview/gradle.properties @@ -1,3 +1,3 @@ POM_NAME=CircleImageView POM_ARTIFACT_ID=circleimageview -POM_PACKAGING=aar \ No newline at end of file +POM_PACKAGING=aar diff --git a/circleimageview/src/main/AndroidManifest.xml b/circleimageview/src/main/AndroidManifest.xml index 432e859..d9f621e 100644 --- a/circleimageview/src/main/AndroidManifest.xml +++ b/circleimageview/src/main/AndroidManifest.xml @@ -4,4 +4,4 @@ - \ No newline at end of file + diff --git a/sample/build.gradle b/sample/build.gradle index 32f4c20..9f16058 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -12,4 +12,4 @@ android { dependencies { implementation project(':circleimageview') -} \ No newline at end of file +} diff --git a/sample/proguard-rules.txt b/sample/proguard-rules.txt index 21a30b1..59985f0 100644 --- a/sample/proguard-rules.txt +++ b/sample/proguard-rules.txt @@ -14,4 +14,4 @@ # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; -#} \ No newline at end of file +#} diff --git a/sample/src/main/res/values/colors.xml b/sample/src/main/res/values/colors.xml index f7fe3c0..ea49b51 100644 --- a/sample/src/main/res/values/colors.xml +++ b/sample/src/main/res/values/colors.xml @@ -4,4 +4,4 @@ #FF222222 #FFEEEEEE - \ No newline at end of file + diff --git a/settings.gradle b/settings.gradle index 8fbd5fe..0503e7f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':circleimageview', ':sample' \ No newline at end of file +include ':circleimageview', ':sample' From 2b0ba76c6bcfff07b36d08101c257c6a516f58dd Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 17 Jan 2020 16:18:52 +0100 Subject: [PATCH 102/118] Prepare release 3.0.2 --- README.md | 5 ++++- gradle.properties | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 66e7133..df90895 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Gradle ``` dependencies { ... - implementation 'de.hdodenhof:circleimageview:3.0.1' + implementation 'de.hdodenhof:circleimageview:3.0.2' } ``` @@ -61,6 +61,9 @@ Adding a gap is also not support directly but [there's a workaround](https://git Changelog --------- +* **3.0.2** + * Fix NPE during initialization on API level <= 19 + * Fix wrong outline being provided if circular transformation is disabled * **3.0.1** * Fix touch event not fired if view is empty * Fix touchable area limited to a circle even if transformation is disabled diff --git a/gradle.properties b/gradle.properties index fa4c4a5..b242bd3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=3.1.0-SNAPSHOT +VERSION_NAME=3.0.2 GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From f31f7fc693a8567239af6ff221935285d4a8fae7 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 17 Jan 2020 16:19:18 +0100 Subject: [PATCH 103/118] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b242bd3..fa4c4a5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=3.0.2 +VERSION_NAME=3.1.0-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 0793af5bf01a8773b8fa31deabe62b3909489f88 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 26 Jan 2020 11:50:04 +0100 Subject: [PATCH 104/118] Enable bitmap filtering and dithering This aligns the paint flags with those a BitmapDrawable uses. --- .../main/java/de/hdodenhof/circleimageview/CircleImageView.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 77f9917..ca7bc0a 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -355,6 +355,8 @@ private void setup() { mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mBitmapPaint.setAntiAlias(true); + mBitmapPaint.setDither(true); + mBitmapPaint.setFilterBitmap(true); mBitmapPaint.setShader(mBitmapShader); mBorderPaint.setStyle(Paint.Style.STROKE); From b2c76d51b394b140bbfaf692eb4071613ac36cdb Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 26 Jan 2020 11:51:38 +0100 Subject: [PATCH 105/118] Prepare release 3.1.0 --- README.md | 4 +++- gradle.properties | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index df90895..bd59c17 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Gradle ``` dependencies { ... - implementation 'de.hdodenhof:circleimageview:3.0.2' + implementation 'de.hdodenhof:circleimageview:3.1.0' } ``` @@ -61,6 +61,8 @@ Adding a gap is also not support directly but [there's a workaround](https://git Changelog --------- +* **3.1.0** + * Align bitmap paint flags with BitmapDrawable (improves scaling) * **3.0.2** * Fix NPE during initialization on API level <= 19 * Fix wrong outline being provided if circular transformation is disabled diff --git a/gradle.properties b/gradle.properties index fa4c4a5..5d7e3c1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=3.1.0-SNAPSHOT +VERSION_NAME=3.1.0 GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From 61a4b87cd8283a3fca6f3396af0c54f26d29d73b Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Sun, 26 Jan 2020 11:52:35 +0100 Subject: [PATCH 106/118] Prepare for next release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5d7e3c1..fb5e921 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=3.1.0 +VERSION_NAME=3.2.0-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From ad99f388e9d130ae18becccf31b626b262e4d218 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Wed, 11 Mar 2020 18:22:13 +0100 Subject: [PATCH 107/118] Bump Android Gradle plugin and build tools --- build.gradle | 2 +- circleimageview/build.gradle | 2 +- sample/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 2cfdd16..167a9f7 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.android.tools.build:gradle:3.6.1' } } diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index de0a2f7..bea0df9 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' android { compileSdkVersion 29 - buildToolsVersion '29.0.2' + buildToolsVersion '29.0.3' defaultConfig { minSdkVersion 8 diff --git a/sample/build.gradle b/sample/build.gradle index 9f16058..38166e6 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 29 - buildToolsVersion '29.0.2' + buildToolsVersion '29.0.3' defaultConfig { minSdkVersion 14 From 7ad4632d37dec6c6f2d6814664ffd2f7835c8213 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Wed, 11 Mar 2020 18:50:42 +0100 Subject: [PATCH 108/118] Add support for image alpha --- .../circleimageview/CircleImageView.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index ca7bc0a..b04de3d 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -55,6 +55,7 @@ public class CircleImageView extends ImageView { private static final int DEFAULT_BORDER_WIDTH = 0; private static final int DEFAULT_BORDER_COLOR = Color.BLACK; private static final int DEFAULT_CIRCLE_BACKGROUND_COLOR = Color.TRANSPARENT; + private static final int DEFAULT_IMAGE_ALPHA = 255; private static final boolean DEFAULT_BORDER_OVERLAY = false; private final RectF mDrawableRect = new RectF(); @@ -68,6 +69,7 @@ public class CircleImageView extends ImageView { private int mBorderColor = DEFAULT_BORDER_COLOR; private int mBorderWidth = DEFAULT_BORDER_WIDTH; private int mCircleBackgroundColor = DEFAULT_CIRCLE_BACKGROUND_COLOR; + private int mImageAlpha = DEFAULT_IMAGE_ALPHA; private Bitmap mBitmap; private BitmapShader mBitmapShader; @@ -275,6 +277,24 @@ public void setImageURI(Uri uri) { initializeBitmap(); } + @Override + public void setImageAlpha(int alpha) { + alpha &= 0xFF; + + if (alpha == mImageAlpha) { + return; + } + + mImageAlpha = alpha; + applyImageAlpha(); + invalidate(); + } + + @Override + public int getImageAlpha() { + return mImageAlpha; + } + @Override public void setColorFilter(ColorFilter cf) { if (cf == mColorFilter) { @@ -291,6 +311,15 @@ public ColorFilter getColorFilter() { return mColorFilter; } + @SuppressWarnings("ConstantConditions") + private void applyImageAlpha() { + // This might be called from setImageAlpha during ImageView construction + // before member initialization has finished on API level <= 19. + if (mBitmapPaint != null) { + mBitmapPaint.setAlpha(mImageAlpha); + } + } + @SuppressWarnings("ConstantConditions") private void applyColorFilter() { // This might be called from setColorFilter during ImageView construction @@ -380,6 +409,7 @@ private void setup() { } mDrawableRadius = Math.min(mDrawableRect.height() / 2.0f, mDrawableRect.width() / 2.0f); + applyImageAlpha(); applyColorFilter(); updateShaderMatrix(); invalidate(); From 3d10e243cc27267f5eeae848f44e6d5ae58d9bf3 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 13 Mar 2020 13:01:42 +0100 Subject: [PATCH 109/118] Replace fields holding bitmap dimensions with local variables --- .../circleimageview/CircleImageView.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index b04de3d..c6f516f 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -73,8 +73,6 @@ public class CircleImageView extends ImageView { private Bitmap mBitmap; private BitmapShader mBitmapShader; - private int mBitmapWidth; - private int mBitmapHeight; private float mDrawableRadius; private float mBorderRadius; @@ -397,9 +395,6 @@ private void setup() { mCircleBackgroundPaint.setAntiAlias(true); mCircleBackgroundPaint.setColor(mCircleBackgroundColor); - mBitmapHeight = mBitmap.getHeight(); - mBitmapWidth = mBitmap.getWidth(); - mBorderRect.set(calculateBounds()); mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2.0f, (mBorderRect.width() - mBorderWidth) / 2.0f); @@ -434,12 +429,15 @@ private void updateShaderMatrix() { mShaderMatrix.set(null); - if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) { - scale = mDrawableRect.height() / (float) mBitmapHeight; - dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f; + int bitmapHeight = mBitmap.getHeight(); + int bitmapWidth = mBitmap.getWidth(); + + if (bitmapWidth * mDrawableRect.height() > mDrawableRect.width() * bitmapHeight) { + scale = mDrawableRect.height() / (float) bitmapHeight; + dx = (mDrawableRect.width() - bitmapWidth * scale) * 0.5f; } else { - scale = mDrawableRect.width() / (float) mBitmapWidth; - dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f; + scale = mDrawableRect.width() / (float) bitmapWidth; + dy = (mDrawableRect.height() - bitmapHeight * scale) * 0.5f; } mShaderMatrix.setScale(scale, scale); From ec54e53022dd1dd1e0dcd84fb944b95d437366cc Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 13 Mar 2020 13:02:21 +0100 Subject: [PATCH 110/118] Remove pointless override of getScaleType --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index c6f516f..b676a9c 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -123,11 +123,6 @@ private void init() { } } - @Override - public ScaleType getScaleType() { - return SCALE_TYPE; - } - @Override public void setScaleType(ScaleType scaleType) { if (scaleType != SCALE_TYPE) { From accab583560892497a45a36848e8b77f6daf2d53 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 13 Mar 2020 13:17:53 +0100 Subject: [PATCH 111/118] Restructure initialization and property updates --- .../circleimageview/CircleImageView.java | 158 +++++++++--------- 1 file changed, 82 insertions(+), 76 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index b676a9c..a89ae10 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -72,15 +72,15 @@ public class CircleImageView extends ImageView { private int mImageAlpha = DEFAULT_IMAGE_ALPHA; private Bitmap mBitmap; - private BitmapShader mBitmapShader; private float mDrawableRadius; private float mBorderRadius; private ColorFilter mColorFilter; - private boolean mReady; - private boolean mSetupPending; + private boolean mInitialized; + private boolean mRebuildShader; + private boolean mBorderOverlay; private boolean mDisableCircularTransformation; @@ -110,17 +110,28 @@ public CircleImageView(Context context, AttributeSet attrs, int defStyle) { } private void init() { + mInitialized = true; + super.setScaleType(SCALE_TYPE); - mReady = true; + + mBitmapPaint.setAntiAlias(true); + mBitmapPaint.setDither(true); + mBitmapPaint.setFilterBitmap(true); + mBitmapPaint.setAlpha(mImageAlpha); + mBitmapPaint.setColorFilter(mColorFilter); + + mBorderPaint.setStyle(Paint.Style.STROKE); + mBorderPaint.setAntiAlias(true); + mBorderPaint.setColor(mBorderColor); + mBorderPaint.setStrokeWidth(mBorderWidth); + + mCircleBackgroundPaint.setStyle(Paint.Style.FILL); + mCircleBackgroundPaint.setAntiAlias(true); + mCircleBackgroundPaint.setColor(mCircleBackgroundColor); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setOutlineProvider(new OutlineProvider()); } - - if (mSetupPending) { - setup(); - mSetupPending = false; - } } @Override @@ -148,6 +159,15 @@ protected void onDraw(Canvas canvas) { return; } + if (mRebuildShader) { + mRebuildShader = false; + + BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); + bitmapShader.setLocalMatrix(mShaderMatrix); + + mBitmapPaint.setShader(bitmapShader); + } + if (mCircleBackgroundColor != Color.TRANSPARENT) { canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mCircleBackgroundPaint); } @@ -160,19 +180,22 @@ protected void onDraw(Canvas canvas) { @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); - setup(); + updateDimensions(); + invalidate(); } @Override public void setPadding(int left, int top, int right, int bottom) { super.setPadding(left, top, right, bottom); - setup(); + updateDimensions(); + invalidate(); } @Override public void setPaddingRelative(int start, int top, int end, int bottom) { super.setPaddingRelative(start, top, end, bottom); - setup(); + updateDimensions(); + invalidate(); } public int getBorderColor() { @@ -185,7 +208,7 @@ public void setBorderColor(@ColorInt int borderColor) { } mBorderColor = borderColor; - mBorderPaint.setColor(mBorderColor); + mBorderPaint.setColor(borderColor); invalidate(); } @@ -217,7 +240,9 @@ public void setBorderWidth(int borderWidth) { } mBorderWidth = borderWidth; - setup(); + mBorderPaint.setStrokeWidth(borderWidth); + updateDimensions(); + invalidate(); } public boolean isBorderOverlay() { @@ -230,7 +255,8 @@ public void setBorderOverlay(boolean borderOverlay) { } mBorderOverlay = borderOverlay; - setup(); + updateDimensions(); + invalidate(); } public boolean isDisableCircularTransformation() { @@ -238,36 +264,48 @@ public boolean isDisableCircularTransformation() { } public void setDisableCircularTransformation(boolean disableCircularTransformation) { - if (mDisableCircularTransformation == disableCircularTransformation) { + if (disableCircularTransformation == mDisableCircularTransformation) { return; } mDisableCircularTransformation = disableCircularTransformation; - initializeBitmap(); + + if (disableCircularTransformation) { + mBitmap = null; + mBitmapPaint.setShader(null); + } else { + initializeBitmap(); + } + + invalidate(); } @Override public void setImageBitmap(Bitmap bm) { super.setImageBitmap(bm); initializeBitmap(); + invalidate(); } @Override public void setImageDrawable(Drawable drawable) { super.setImageDrawable(drawable); initializeBitmap(); + invalidate(); } @Override public void setImageResource(@DrawableRes int resId) { super.setImageResource(resId); initializeBitmap(); + invalidate(); } @Override public void setImageURI(Uri uri) { super.setImageURI(uri); initializeBitmap(); + invalidate(); } @Override @@ -279,8 +317,13 @@ public void setImageAlpha(int alpha) { } mImageAlpha = alpha; - applyImageAlpha(); - invalidate(); + + // This might be called during ImageView construction before + // member initialization has finished on API level >= 16. + if (mInitialized) { + mBitmapPaint.setAlpha(alpha); + invalidate(); + } } @Override @@ -295,8 +338,13 @@ public void setColorFilter(ColorFilter cf) { } mColorFilter = cf; - applyColorFilter(); - invalidate(); + + // This might be called during ImageView construction before + // member initialization has finished on API level <= 19. + if (mInitialized) { + mBitmapPaint.setColorFilter(cf); + invalidate(); + } } @Override @@ -304,24 +352,6 @@ public ColorFilter getColorFilter() { return mColorFilter; } - @SuppressWarnings("ConstantConditions") - private void applyImageAlpha() { - // This might be called from setImageAlpha during ImageView construction - // before member initialization has finished on API level <= 19. - if (mBitmapPaint != null) { - mBitmapPaint.setAlpha(mImageAlpha); - } - } - - @SuppressWarnings("ConstantConditions") - private void applyColorFilter() { - // This might be called from setColorFilter during ImageView construction - // before member initialization has finished on API level <= 19. - if (mBitmapPaint != null) { - mBitmapPaint.setColorFilter(mColorFilter); - } - } - private Bitmap getBitmapFromDrawable(Drawable drawable) { if (drawable == null) { return null; @@ -351,45 +381,20 @@ private Bitmap getBitmapFromDrawable(Drawable drawable) { } private void initializeBitmap() { - if (mDisableCircularTransformation) { - mBitmap = null; - } else { - mBitmap = getBitmapFromDrawable(getDrawable()); - } - setup(); - } - - private void setup() { - if (!mReady) { - mSetupPending = true; - return; - } + mBitmap = getBitmapFromDrawable(getDrawable()); - if (getWidth() == 0 && getHeight() == 0) { + if (!mInitialized) { return; } - if (mBitmap == null) { - invalidate(); - return; + if (mBitmap != null) { + updateShaderMatrix(); + } else { + mBitmapPaint.setShader(null); } + } - mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); - - mBitmapPaint.setAntiAlias(true); - mBitmapPaint.setDither(true); - mBitmapPaint.setFilterBitmap(true); - mBitmapPaint.setShader(mBitmapShader); - - mBorderPaint.setStyle(Paint.Style.STROKE); - mBorderPaint.setAntiAlias(true); - mBorderPaint.setColor(mBorderColor); - mBorderPaint.setStrokeWidth(mBorderWidth); - - mCircleBackgroundPaint.setStyle(Paint.Style.FILL); - mCircleBackgroundPaint.setAntiAlias(true); - mCircleBackgroundPaint.setColor(mCircleBackgroundColor); - + private void updateDimensions() { mBorderRect.set(calculateBounds()); mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2.0f, (mBorderRect.width() - mBorderWidth) / 2.0f); @@ -399,10 +404,7 @@ private void setup() { } mDrawableRadius = Math.min(mDrawableRect.height() / 2.0f, mDrawableRect.width() / 2.0f); - applyImageAlpha(); - applyColorFilter(); updateShaderMatrix(); - invalidate(); } private RectF calculateBounds() { @@ -418,6 +420,10 @@ private RectF calculateBounds() { } private void updateShaderMatrix() { + if (mBitmap == null) { + return; + } + float scale; float dx = 0; float dy = 0; @@ -438,7 +444,7 @@ private void updateShaderMatrix() { mShaderMatrix.setScale(scale, scale); mShaderMatrix.postTranslate((int) (dx + 0.5f) + mDrawableRect.left, (int) (dy + 0.5f) + mDrawableRect.top); - mBitmapShader.setLocalMatrix(mShaderMatrix); + mRebuildShader = true; } @SuppressLint("ClickableViewAccessibility") From eec3d962d095ffbd8417fd5de7eaba9077f1f6a7 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 13 Mar 2020 13:34:27 +0100 Subject: [PATCH 112/118] Deprecate setCircleBackgroundColorResource --- .../java/de/hdodenhof/circleimageview/CircleImageView.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index a89ae10..021f1a2 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -226,6 +226,10 @@ public void setCircleBackgroundColor(@ColorInt int circleBackgroundColor) { invalidate(); } + /** + * @deprecated Use {@link #setCircleBackgroundColor(int)} instead + */ + @Deprecated public void setCircleBackgroundColorResource(@ColorRes int circleBackgroundRes) { setCircleBackgroundColor(getContext().getResources().getColor(circleBackgroundRes)); } From 4614eda3e13e81911c3f0ca94f322f056034ff04 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Tue, 17 Mar 2020 16:49:08 +0100 Subject: [PATCH 113/118] Next version is 4.0.0 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index fb5e921..b65822a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=3.2.0-SNAPSHOT +VERSION_NAME=4.0.0-SNAPSHOT GROUP=de.hdodenhof POM_DESCRIPTION=A fast circular ImageView for Android From b33f76d28bc7abee0a29e8727db71e1e68407f3c Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Tue, 17 Mar 2020 16:53:21 +0100 Subject: [PATCH 114/118] Bump minSdkVersion to 14 --- circleimageview/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circleimageview/build.gradle b/circleimageview/build.gradle index bea0df9..3c55fc5 100644 --- a/circleimageview/build.gradle +++ b/circleimageview/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion '29.0.3' defaultConfig { - minSdkVersion 8 + minSdkVersion 14 targetSdkVersion 29 } } From 7163ea389252feeb9a9cb4eaa82aaae9c93f8b85 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Fri, 13 Mar 2020 13:44:24 +0100 Subject: [PATCH 115/118] Draw circle background and border even if no bitmap is set --- .../circleimageview/CircleImageView.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 021f1a2..a4a430b 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -155,23 +155,23 @@ protected void onDraw(Canvas canvas) { return; } - if (mBitmap == null) { - return; + if (mCircleBackgroundColor != Color.TRANSPARENT) { + canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mCircleBackgroundPaint); } - if (mRebuildShader) { - mRebuildShader = false; + if (mBitmap != null) { + if (mRebuildShader) { + mRebuildShader = false; + + BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); + bitmapShader.setLocalMatrix(mShaderMatrix); - BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); - bitmapShader.setLocalMatrix(mShaderMatrix); + mBitmapPaint.setShader(bitmapShader); + } - mBitmapPaint.setShader(bitmapShader); + canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mBitmapPaint); } - if (mCircleBackgroundColor != Color.TRANSPARENT) { - canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mCircleBackgroundPaint); - } - canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mBitmapPaint); if (mBorderWidth > 0) { canvas.drawCircle(mBorderRect.centerX(), mBorderRect.centerY(), mBorderRadius, mBorderPaint); } From 3d1e718314c84b6a4f7e9c521973306c13303de2 Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Tue, 10 Mar 2020 19:07:11 +0100 Subject: [PATCH 116/118] Add support for animated drawables --- .../circleimageview/CircleImageView.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index a4a430b..2f27195 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -42,6 +42,7 @@ import androidx.annotation.ColorInt; import androidx.annotation.ColorRes; import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; @SuppressWarnings("UnusedDeclaration") @@ -72,6 +73,7 @@ public class CircleImageView extends ImageView { private int mImageAlpha = DEFAULT_IMAGE_ALPHA; private Bitmap mBitmap; + private Canvas mBitmapCanvas; private float mDrawableRadius; private float mBorderRadius; @@ -80,6 +82,7 @@ public class CircleImageView extends ImageView { private boolean mInitialized; private boolean mRebuildShader; + private boolean mDrawableDirty; private boolean mBorderOverlay; private boolean mDisableCircularTransformation; @@ -148,6 +151,7 @@ public void setAdjustViewBounds(boolean adjustViewBounds) { } } + @SuppressLint("CanvasSize") @Override protected void onDraw(Canvas canvas) { if (mDisableCircularTransformation) { @@ -160,6 +164,13 @@ protected void onDraw(Canvas canvas) { } if (mBitmap != null) { + if (mDrawableDirty && mBitmapCanvas != null) { + mDrawableDirty = false; + Drawable drawable = getDrawable(); + drawable.setBounds(0, 0, mBitmapCanvas.getWidth(), mBitmapCanvas.getHeight()); + drawable.draw(mBitmapCanvas); + } + if (mRebuildShader) { mRebuildShader = false; @@ -177,6 +188,12 @@ protected void onDraw(Canvas canvas) { } } + @Override + public void invalidateDrawable(@NonNull Drawable dr) { + mDrawableDirty = true; + invalidate(); + } + @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); @@ -276,6 +293,7 @@ public void setDisableCircularTransformation(boolean disableCircularTransformati if (disableCircularTransformation) { mBitmap = null; + mBitmapCanvas = null; mBitmapPaint.setShader(null); } else { initializeBitmap(); @@ -387,6 +405,12 @@ private Bitmap getBitmapFromDrawable(Drawable drawable) { private void initializeBitmap() { mBitmap = getBitmapFromDrawable(getDrawable()); + if (mBitmap != null && mBitmap.isMutable()) { + mBitmapCanvas = new Canvas(mBitmap); + } else { + mBitmapCanvas = null; + } + if (!mInitialized) { return; } From 0169f18a47eecee35e036b815f4e0b5820d6b832 Mon Sep 17 00:00:00 2001 From: keithchad Date: Sat, 28 Nov 2020 13:31:36 +0300 Subject: [PATCH 117/118] readme change --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bd59c17..a329124 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ There's currently no direct support for a circle bound selector but you can foll **How can I add a gap between image and border?** -Adding a gap is also not support directly but [there's a workaround](https://github.com/hdodenhof/CircleImageView/issues/133#issuecomment-225437930). +Adding a gap is also not supported directly but [there's a workaround](https://github.com/hdodenhof/CircleImageView/issues/133#issuecomment-225437930). Changelog --------- From 59ee0a11d7199cdeb2d454ebeaaa8396238c418f Mon Sep 17 00:00:00 2001 From: Henning Dodenhof Date: Tue, 10 Jan 2023 20:03:13 +0100 Subject: [PATCH 118/118] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a329124..3a978c5 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ CircleImageView =============== -A fast circular ImageView perfect for profile images. This is based on [RoundedImageView from Vince Mi](https://github.com/vinc3m1/RoundedImageView) which itself is based on [techniques recommended by Romain Guy](http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/). +A fast circular ImageView perfect for profile images. This is based on [RoundedImageView from Vince Mi](https://github.com/vinc3m1/RoundedImageView) which itself is based on techniques recommended by [Romain Guy](https://twitter.com/romainguy). ![CircleImageView](https://raw.github.com/hdodenhof/CircleImageView/master/screenshot.png)