From 30c34aa16d7623de04def94d77fb5e30f417865a Mon Sep 17 00:00:00 2001 From: tcqq Date: Fri, 25 Oct 2019 07:20:20 +0800 Subject: [PATCH 1/6] Use gradle to import CircleImageView --- build.gradle | 4 +- library/build.gradle | 7 +- .../circleimageview/CircleImageView.java | 494 ------------------ sample/build.gradle | 2 +- 4 files changed, 7 insertions(+), 500 deletions(-) delete mode 100644 library/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java diff --git a/build.gradle b/build.gradle index 2815544..2fb6c7e 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ buildscript { compileSdk: 28, minSdk : 14, targetSdk : 28, - version : "3.0.3" + version : "3.0.4" ] } @@ -40,7 +40,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:3.5.1' classpath 'com.novoda:bintray-release:0.9.1' } } diff --git a/library/build.gradle b/library/build.gradle index a4f7109..f8383a4 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -58,15 +58,16 @@ android { } dependencies { - implementation 'androidx.annotation:annotation:1.0.0' - implementation 'androidx.fragment:fragment:1.0.0' + implementation 'androidx.annotation:annotation:1.1.0' + implementation 'androidx.fragment:fragment:1.1.0' + implementation 'de.hdodenhof:circleimageview:3.0.1' } publish { userOrg = 'raphaelbussa' groupId = 'rebus' artifactId = 'header-view' - publishVersion = '3.0.3' + publishVersion = '3.0.4' desc = 'Create an header for android.support.design.widget.NavigationView' website = 'https://rebus007.github.io/HeaderView/' } \ No newline at end of file diff --git a/library/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/library/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java deleted file mode 100644 index 8864012..0000000 --- a/library/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ /dev/null @@ -1,494 +0,0 @@ -/* - * 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. - * 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.annotation.SuppressLint; -import android.annotation.TargetApi; -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Bitmap; -import android.graphics.BitmapShader; -import android.graphics.Canvas; -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.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; - -import rebus.header.view.R; - -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 = 2; - - 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 boolean DEFAULT_BORDER_OVERLAY = false; - - private final RectF mDrawableRect = new RectF(); - private final RectF mBorderRect = new RectF(); - - private final Matrix mShaderMatrix = new Matrix(); - private final Paint mBitmapPaint = new Paint(); - private final Paint mBorderPaint = new Paint(); - private final Paint mCircleBackgroundPaint = new Paint(); - - private int mBorderColor = DEFAULT_BORDER_COLOR; - private int mBorderWidth = DEFAULT_BORDER_WIDTH; - private int mCircleBackgroundColor = DEFAULT_CIRCLE_BACKGROUND_COLOR; - - private Bitmap mBitmap; - private BitmapShader mBitmapShader; - private int mBitmapWidth; - private int mBitmapHeight; - - private float mDrawableRadius; - private float mBorderRadius; - - private ColorFilter mColorFilter; - - private boolean mReady; - private boolean mSetupPending; - private boolean mBorderOverlay; - private boolean mDisableCircularTransformation; - - public CircleImageView(Context context) { - super(context); - - init(); - } - - public CircleImageView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public CircleImageView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0); - - 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); - } - - a.recycle(); - - init(); - } - - 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; - } - } - - @Override - public ScaleType getScaleType() { - return SCALE_TYPE; - } - - @Override - public void setScaleType(ScaleType scaleType) { - if (scaleType != SCALE_TYPE) { - throw new IllegalArgumentException(String.format("ScaleType %s not supported.", scaleType)); - } - } - - @Override - public void setAdjustViewBounds(boolean adjustViewBounds) { - if (adjustViewBounds) { - throw new IllegalArgumentException("adjustViewBounds not supported."); - } - } - - @Override - protected void onDraw(Canvas canvas) { - if (mDisableCircularTransformation) { - super.onDraw(canvas); - return; - } - - if (mBitmap == null) { - return; - } - - 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); - } - } - - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - super.onSizeChanged(w, h, oldw, 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; - } - - public void setBorderColor(@ColorInt int borderColor) { - if (borderColor == mBorderColor) { - return; - } - - mBorderColor = borderColor; - mBorderPaint.setColor(mBorderColor); - invalidate(); - } - - /** - * @deprecated Use {@link #setBorderColor(int)} instead - */ - @Deprecated - 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 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; - } - - public void setBorderWidth(int borderWidth) { - if (borderWidth == mBorderWidth) { - return; - } - - mBorderWidth = borderWidth; - setup(); - } - - public boolean isBorderOverlay() { - return mBorderOverlay; - } - - public void setBorderOverlay(boolean borderOverlay) { - if (borderOverlay == mBorderOverlay) { - return; - } - - mBorderOverlay = 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); - initializeBitmap(); - } - - @Override - public void setImageDrawable(Drawable drawable) { - super.setImageDrawable(drawable); - initializeBitmap(); - } - - @Override - public void setImageResource(@DrawableRes int resId) { - super.setImageResource(resId); - initializeBitmap(); - } - - @Override - public void setImageURI(Uri uri) { - super.setImageURI(uri); - initializeBitmap(); - } - - @Override - public ColorFilter getColorFilter() { - return mColorFilter; - } - - @Override - public void setColorFilter(ColorFilter cf) { - if (cf == mColorFilter) { - return; - } - - mColorFilter = cf; - applyColorFilter(); - invalidate(); - } - - private void applyColorFilter() { - if (mBitmapPaint != null) { - mBitmapPaint.setColorFilter(mColorFilter); - } - } - - private Bitmap getBitmapFromDrawable(Drawable drawable) { - if (drawable == null) { - return null; - } - - if (drawable instanceof BitmapDrawable) { - return ((BitmapDrawable) drawable).getBitmap(); - } - - try { - Bitmap bitmap; - - if (drawable instanceof ColorDrawable) { - bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG); - } else { - bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG); - } - - Canvas canvas = new Canvas(bitmap); - drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); - drawable.draw(canvas); - return bitmap; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - private void initializeBitmap() { - if (mDisableCircularTransformation) { - mBitmap = null; - } else { - mBitmap = getBitmapFromDrawable(getDrawable()); - } - setup(); - } - - private void setup() { - if (!mReady) { - mSetupPending = true; - return; - } - - if (getWidth() == 0 && getHeight() == 0) { - return; - } - - if (mBitmap == null) { - invalidate(); - return; - } - - mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); - - mBitmapPaint.setAntiAlias(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); - - mBitmapHeight = mBitmap.getHeight(); - mBitmapWidth = mBitmap.getWidth(); - - mBorderRect.set(calculateBounds()); - mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2.0f, (mBorderRect.width() - mBorderWidth) / 2.0f); - - mDrawableRect.set(mBorderRect); - if (!mBorderOverlay && mBorderWidth > 0) { - mDrawableRect.inset(mBorderWidth - 1.0f, mBorderWidth - 1.0f); - } - mDrawableRadius = Math.min(mDrawableRect.height() / 2.0f, mDrawableRect.width() / 2.0f); - - applyColorFilter(); - updateShaderMatrix(); - 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; - float dy = 0; - - mShaderMatrix.set(null); - - if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) { - scale = mDrawableRect.height() / (float) mBitmapHeight; - dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f; - } else { - scale = mDrawableRect.width() / (float) mBitmapWidth; - dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f; - } - - mShaderMatrix.setScale(scale, scale); - mShaderMatrix.postTranslate((int) (dx + 0.5f) + mDrawableRect.left, (int) (dy + 0.5f) + mDrawableRect.top); - - mBitmapShader.setLocalMatrix(mShaderMatrix); - } - - @SuppressLint("ClickableViewAccessibility") - @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); - } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - @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); - } - - } - -} \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle index e688210..61004a4 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -57,7 +57,7 @@ android { dependencies { implementation project(':library') implementation 'com.google.android.material:material:1.0.0' - implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.appcompat:appcompat:1.1.0' //implementation 'uk.co.chrisjenx:calligraphy:2.3.0' implementation 'com.squareup.picasso:picasso:2.71828' } From 592b798926d337c9a4bb63da44378f4896ba22f4 Mon Sep 17 00:00:00 2001 From: tcqq Date: Fri, 25 Oct 2019 07:28:37 +0800 Subject: [PATCH 2/6] Add JitPack --- build.gradle | 4 +--- library/build.gradle | 11 +---------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index 2fb6c7e..d8b4c36 100644 --- a/build.gradle +++ b/build.gradle @@ -36,12 +36,11 @@ buildscript { repositories { google() jcenter() - maven { url 'http://oss.sonatype.org/content/repositories/snapshots' } } dependencies { classpath 'com.android.tools.build:gradle:3.5.1' - classpath 'com.novoda:bintray-release:0.9.1' + classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' } } @@ -49,7 +48,6 @@ allprojects { repositories { google() jcenter() - maven { url 'http://oss.sonatype.org/content/repositories/snapshots' } } } diff --git a/library/build.gradle b/library/build.gradle index f8383a4..2554e28 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -23,7 +23,7 @@ */ apply plugin: 'com.android.library' -apply plugin: 'com.novoda.bintray-release' +apply plugin: 'com.github.dcendents.android-maven' android { @@ -61,13 +61,4 @@ dependencies { implementation 'androidx.annotation:annotation:1.1.0' implementation 'androidx.fragment:fragment:1.1.0' implementation 'de.hdodenhof:circleimageview:3.0.1' -} - -publish { - userOrg = 'raphaelbussa' - groupId = 'rebus' - artifactId = 'header-view' - publishVersion = '3.0.4' - desc = 'Create an header for android.support.design.widget.NavigationView' - website = 'https://rebus007.github.io/HeaderView/' } \ No newline at end of file From aa4b395be8605a260ffb179b28a166daa4deede5 Mon Sep 17 00:00:00 2001 From: tcqq Date: Fri, 25 Oct 2019 07:38:20 +0800 Subject: [PATCH 3/6] Add JitPack --- library/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/library/build.gradle b/library/build.gradle index 2554e28..2a5aa99 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -24,6 +24,7 @@ apply plugin: 'com.android.library' apply plugin: 'com.github.dcendents.android-maven' +group = 'com.github.tcqq' android { From adb3405550d237cc07837fd66636c6165a9ff2ed Mon Sep 17 00:00:00 2001 From: tcqq Date: Fri, 25 Oct 2019 07:51:51 +0800 Subject: [PATCH 4/6] Add JitPack. --- sample/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/sample/build.gradle b/sample/build.gradle index 61004a4..e284fd3 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -58,6 +58,5 @@ dependencies { implementation project(':library') implementation 'com.google.android.material:material:1.0.0' implementation 'androidx.appcompat:appcompat:1.1.0' - //implementation 'uk.co.chrisjenx:calligraphy:2.3.0' implementation 'com.squareup.picasso:picasso:2.71828' } From aeb01338ffe3b688a553c4864a17ebcb0e753b38 Mon Sep 17 00:00:00 2001 From: tcqq Date: Fri, 25 Oct 2019 08:26:14 +0800 Subject: [PATCH 5/6] Revert "Use gradle to import CircleImageView" This reverts commit 30c34aa1 --- build.gradle | 4 +++- library/build.gradle | 12 ++++++++++-- sample/build.gradle | 2 ++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index d8b4c36..c8515b5 100644 --- a/build.gradle +++ b/build.gradle @@ -29,13 +29,14 @@ buildscript { compileSdk: 28, minSdk : 14, targetSdk : 28, - version : "3.0.4" + version : "3.0.3" ] } repositories { google() jcenter() + maven { url 'http://oss.sonatype.org/content/repositories/snapshots' } } dependencies { @@ -48,6 +49,7 @@ allprojects { repositories { google() jcenter() + maven { url 'http://oss.sonatype.org/content/repositories/snapshots' } } } diff --git a/library/build.gradle b/library/build.gradle index 2a5aa99..6ce25f8 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -23,8 +23,7 @@ */ apply plugin: 'com.android.library' -apply plugin: 'com.github.dcendents.android-maven' -group = 'com.github.tcqq' +apply plugin: 'com.novoda.bintray-release' android { @@ -62,4 +61,13 @@ dependencies { implementation 'androidx.annotation:annotation:1.1.0' implementation 'androidx.fragment:fragment:1.1.0' implementation 'de.hdodenhof:circleimageview:3.0.1' +} + +publish { + userOrg = 'raphaelbussa' + groupId = 'rebus' + artifactId = 'header-view' + publishVersion = '3.0.3' + desc = 'Create an header for android.support.design.widget.NavigationView' + website = 'https://rebus007.github.io/HeaderView/' } \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle index e284fd3..0263793 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -58,5 +58,7 @@ dependencies { implementation project(':library') implementation 'com.google.android.material:material:1.0.0' implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.appcompat:appcompat:1.1.0' + //implementation 'uk.co.chrisjenx:calligraphy:2.3.0' implementation 'com.squareup.picasso:picasso:2.71828' } From 1a23202813e518c4f156f7ef50f6211942e3f2be Mon Sep 17 00:00:00 2001 From: tcqq Date: Fri, 25 Oct 2019 08:27:57 +0800 Subject: [PATCH 6/6] Revert "Use gradle to import CircleImageView" This reverts commit 30c34aa1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c8515b5..a86dcd8 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.5.1' - classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' + classpath 'com.novoda:bintray-release:0.9.1' } }