From c3bc8cb3efb8bc9375cfd4b620c3ae7d6efcbea3 Mon Sep 17 00:00:00 2001 From: whilu Date: Mon, 3 Jul 2017 21:44:14 +0800 Subject: [PATCH 01/31] Update: README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 10cd713..1c2a557 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ Now, you have successfully created some TagViews. The following will show some m |theme|code|value|description |:---:|:---:|:---:|:---:| -| none | ColorFactory.NONE | -1 | If you customize TagView with your way, set this theme +| none | ColorFactory.NONE | -1 | **If you customize TagView with your way, set this theme** | random | ColorFactory.RANDOM | 0 | Create each TagView using random color | pure_cyan | ColorFactory.PURE_CYAN | 1 | All TagView created by pure cyan color | pure_teal | ColorFactory.PURE_TEAL | 2 | All TagView created by pure teal color From 472af7e47b28b6fff3cb92df3f27ea0c87f61068 Mon Sep 17 00:00:00 2001 From: whilu Date: Tue, 12 Sep 2017 22:42:29 +0800 Subject: [PATCH 02/31] Update Android support library to version 25.3.1 --- androidtagview/build.gradle | 2 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/build.gradle | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/androidtagview/build.gradle b/androidtagview/build.gradle index b819a0e..62e5883 100644 --- a/androidtagview/build.gradle +++ b/androidtagview/build.gradle @@ -21,6 +21,6 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.0.1' + compile 'com.android.support:appcompat-v7:25.3.1' } apply from: 'https://raw.githubusercontent.com/whilu/AndroidPublishLibrary/master/project/library/bintray_publish.gradle' \ No newline at end of file diff --git a/build.gradle b/build.gradle index 45efda8..dfdaff1 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.2' + classpath 'com.android.tools.build:gradle:2.3.3' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c4e826c..284809d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Oct 30 18:08:28 CST 2016 +#Sun Sep 10 14:05:37 CST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 9435b08..2ba82e1 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -23,6 +23,6 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile project(':androidtagview') testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.0.1' - compile 'com.android.support:design:25.0.1' + compile 'com.android.support:appcompat-v7:25.3.1' + compile 'com.android.support:design:25.3.1' } From d62e9b437e1900d302f657c0475fffe74cb0a7e6 Mon Sep 17 00:00:00 2001 From: Kamui Date: Tue, 12 Jun 2018 08:54:01 +0700 Subject: [PATCH 03/31] Make TagView selectable --- .../androidtagview/TagContainerLayout.java | 50 +++++++++++++++++++ .../java/co/lujun/androidtagview/TagView.java | 23 +++++++++ androidtagview/src/main/res/values/attrs.xml | 1 + 3 files changed, 74 insertions(+) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index 54ee53e..0c3d3aa 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -159,6 +159,11 @@ public class TagContainerLayout extends ViewGroup { */ private boolean isTagViewClickable; + /** + * Whether TagView can selectable(default unselectable) + */ + private boolean isTagViewSelectable; + /** * Tags */ @@ -314,6 +319,7 @@ private void init(Context context, AttributeSet attrs, int defStyleAttr) { mTagTextColor = attributes.getColor(R.styleable.AndroidTagView_tag_text_color, mTagTextColor); mTagTextDirection = attributes.getInt(R.styleable.AndroidTagView_tag_text_direction, mTagTextDirection); isTagViewClickable = attributes.getBoolean(R.styleable.AndroidTagView_tag_clickable, false); + isTagViewSelectable = attributes.getBoolean(R.styleable.AndroidTagView_tag_selectable, false); mRippleColor = attributes.getColor(R.styleable.AndroidTagView_tag_ripple_color, Color.parseColor("#EEEEEE")); mRippleAlpha = attributes.getInteger(R.styleable.AndroidTagView_tag_ripple_alpha, mRippleAlpha); mRippleDuration = attributes.getInteger(R.styleable.AndroidTagView_tag_ripple_duration, mRippleDuration); @@ -563,6 +569,7 @@ private void initTagView(TagView tagView, int position) { tagView.setHorizontalPadding(mTagHorizontalPadding); tagView.setVerticalPadding(mTagVerticalPadding); tagView.setIsViewClickable(isTagViewClickable); + tagView.setIsViewSelectable(isTagViewSelectable); tagView.setBdDistance(mTagBdDistance); tagView.setOnTagClickListener(mOnTagClickListener); tagView.setRippleAlpha(mRippleAlpha); @@ -811,6 +818,31 @@ public void setOnTagClickListener(TagView.OnTagClickListener listener) { invalidateTags(); } + /** + * Toggle TagView's selected state. + * + * @param isSelected, position + */ + public void setTagViewSelectedState(boolean isSelected, int position) { + if (isTagViewSelectable) + ((TagView)mChildViews.get(position)).setIsViewSelected(isSelected); + } + + /** + * Return selected TagView + * + * @return list of selected positions + */ + public List getSelectedTagViewPositions() { + List selectedPositions = new ArrayList<>(); + for (int i = 0; i < mChildViews.size(); i++){ + if (((TagView)mChildViews.get(i)).getIsViewSelected()){ + selectedPositions.add(i); + } + } + return selectedPositions; + } + /** * Get TagView text. * @@ -1073,6 +1105,24 @@ public void setIsTagViewClickable(boolean clickable) { this.isTagViewClickable = clickable; } + /** + * Get TagView is selectable. + * + * @return + */ + public boolean getIsTagViewSelectable() { + return isTagViewSelectable; + } + + /** + * Set TagView is selectable + * + * @param selectable + */ + public void setIsTagViewSelectable(boolean selectable) { + this.isTagViewSelectable= selectable; + } + /** * Get TagView border width. * diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java index 9afd66d..7dcf3de 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java @@ -66,6 +66,12 @@ public class TagView extends View { /** Whether this view clickable*/ private boolean isViewClickable; + /** Whether this view selectable*/ + private boolean isViewSelectable; + + /** Whether this view selected*/ + private boolean isViewSelected; + /** The max length for this tag view*/ private int mTagMaxLength; @@ -410,6 +416,10 @@ public boolean getIsViewClickable(){ return isViewClickable; } + public boolean getIsViewSelected(){ + return isViewSelected; + } + public void setTagMaxLength(int maxLength){ this.mTagMaxLength = maxLength; onDealText(); @@ -419,6 +429,10 @@ public void setOnTagClickListener(OnTagClickListener listener){ this.mOnTagClickListener = listener; } + public int getTagBackgroundColor(){ + return mBackgroundColor; + } + public void setTagBackgroundColor(int color){ this.mBackgroundColor = color; } @@ -456,6 +470,15 @@ public void setIsViewClickable(boolean clickable) { this.isViewClickable = clickable; } + public void setIsViewSelectable(boolean viewSelectable) { + isViewSelectable = viewSelectable; + } + + public void setIsViewSelected(boolean isSelected) { + if (isViewSelectable) + this.isViewSelected = isSelected; + } + public interface OnTagClickListener{ void onTagClick(int position, String text); void onTagLongClick(int position, String text); diff --git a/androidtagview/src/main/res/values/attrs.xml b/androidtagview/src/main/res/values/attrs.xml index 6821af5..098f9a9 100644 --- a/androidtagview/src/main/res/values/attrs.xml +++ b/androidtagview/src/main/res/values/attrs.xml @@ -28,6 +28,7 @@ + From 790bc519d009a492004ea783b62cf0d211325414 Mon Sep 17 00:00:00 2001 From: Kamui Date: Tue, 12 Jun 2018 09:07:23 +0700 Subject: [PATCH 04/31] Make test case for selectable tag in layout 3 --- .../java/co/lujun/sample/MainActivity.java | 107 ++++++++++++++---- sample/src/main/res/layout/content_main.xml | 5 +- 2 files changed, 91 insertions(+), 21 deletions(-) diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index 3253051..9401e0d 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -4,6 +4,8 @@ import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; @@ -83,25 +85,37 @@ public void onTagClick(int position, String text) { @Override public void onTagLongClick(final int position, String text) { - AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) - .setTitle("long click") - .setMessage("You will delete this tag!") - .setPositiveButton("Delete", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (position < mTagContainerLayout1.getChildCount()) { - mTagContainerLayout1.removeTag(position); - } - } - }) - .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }) - .create(); - dialog.show(); +// AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) +// .setTitle("long click") +// .setMessage("You will delete this tag!") +// .setPositiveButton("Delete", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// if (position < mTagContainerLayout1.getChildCount()) { +// mTagContainerLayout1.removeTag(position); +// } +// } +// }) +// .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// } +// }) +// .create(); +// dialog.show(); + mTagContainerLayout1.setTagViewSelectedState(true, position); + + TagView tagView = (TagView)mTagContainerLayout1.getChildAt(position); + int color = tagView.getTagBackgroundColor(); + color = manipulateColor(color,0.3f); + //tagView.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN); + tagView.setTagBackgroundColor(color); + tagView.invalidate(); + + List selectedPositions = mTagContainerLayout1.getSelectedTagViewPositions(); + Toast.makeText(MainActivity.this, "selected-positions:" + selectedPositions.toString(), + Toast.LENGTH_SHORT).show(); } @Override @@ -112,6 +126,50 @@ public void onTagCrossClick(int position) { } }); + mTagContainerLayout3.setOnTagClickListener(new TagView.OnTagClickListener() { + @Override + public void onTagClick(int position, String text) { + } + + @Override + public void onTagLongClick(final int position, String text) { +// AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) +// .setTitle("long click") +// .setMessage("You will delete this tag!") +// .setPositiveButton("Delete", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// if (position < mTagContainerLayout1.getChildCount()) { +// mTagContainerLayout1.removeTag(position); +// } +// } +// }) +// .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// } +// }) +// .create(); +// dialog.show(); + mTagContainerLayout3.setTagViewSelectedState(true, position); + + TagView tagView = (TagView)mTagContainerLayout3.getChildAt(position); + int color = tagView.getTagBackgroundColor(); + color = manipulateColor(color,0.3f); + tagView.setTagBackgroundColor(color); + tagView.invalidate(); + + List selectedPositions = mTagContainerLayout3.getSelectedTagViewPositions(); + Toast.makeText(MainActivity.this, "selected-positions:" + selectedPositions.toString(), + Toast.LENGTH_SHORT).show(); + } + + @Override + public void onTagCrossClick(int position) { + } + }); + // Custom settings // mTagContainerLayout1.setTagMaxLength(4); @@ -172,6 +230,17 @@ public void onClick(View v) { // recyclerView.setAdapter(adapter); } + public int manipulateColor(int color, float factor) { + int a = Color.alpha(color); + int r = Math.round(Color.red(color) * factor); + int g = Math.round(Color.green(color) * factor); + int b = Math.round(Color.blue(color) * factor); + return Color.argb(a, + Math.min(r,255), + Math.min(g,255), + Math.min(b,255)); + } + public class TagRecyclerViewAdapter extends RecyclerView.Adapter { diff --git a/sample/src/main/res/layout/content_main.xml b/sample/src/main/res/layout/content_main.xml index 70c532b..24d98fd 100644 --- a/sample/src/main/res/layout/content_main.xml +++ b/sample/src/main/res/layout/content_main.xml @@ -88,14 +88,15 @@ app:container_border_radius="0dp" app:container_gravity="right" app:horizontal_interval="10dp" - app:tag_background_color="#00000000" + app:tag_background_color="#FFFFFFFF" app:tag_border_color="#330000ff" app:tag_border_width="1dp" - app:tag_clickable="false" + app:tag_clickable="true" app:tag_corner_radius="1dp" app:tag_enable_cross="true" app:tag_horizontal_padding="15dp" app:tag_max_length="18" + app:tag_selectable="true" app:tag_text_color="#ff666666" app:tag_text_direction="rtl" app:tag_text_size="14sp" From c1fa0fd7c00a507905defd454b79ad6619797ebd Mon Sep 17 00:00:00 2001 From: Kamui Date: Tue, 12 Jun 2018 09:10:11 +0700 Subject: [PATCH 05/31] remove unnecessary code --- .../java/co/lujun/sample/MainActivity.java | 69 +++++-------------- 1 file changed, 19 insertions(+), 50 deletions(-) diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index 9401e0d..8a68920 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -85,37 +85,25 @@ public void onTagClick(int position, String text) { @Override public void onTagLongClick(final int position, String text) { -// AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) -// .setTitle("long click") -// .setMessage("You will delete this tag!") -// .setPositiveButton("Delete", new DialogInterface.OnClickListener() { -// @Override -// public void onClick(DialogInterface dialog, int which) { -// if (position < mTagContainerLayout1.getChildCount()) { -// mTagContainerLayout1.removeTag(position); -// } -// } -// }) -// .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { -// @Override -// public void onClick(DialogInterface dialog, int which) { -// dialog.dismiss(); -// } -// }) -// .create(); -// dialog.show(); - mTagContainerLayout1.setTagViewSelectedState(true, position); - - TagView tagView = (TagView)mTagContainerLayout1.getChildAt(position); - int color = tagView.getTagBackgroundColor(); - color = manipulateColor(color,0.3f); - //tagView.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN); - tagView.setTagBackgroundColor(color); - tagView.invalidate(); - - List selectedPositions = mTagContainerLayout1.getSelectedTagViewPositions(); - Toast.makeText(MainActivity.this, "selected-positions:" + selectedPositions.toString(), - Toast.LENGTH_SHORT).show(); + AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) + .setTitle("long click") + .setMessage("You will delete this tag!") + .setPositiveButton("Delete", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (position < mTagContainerLayout1.getChildCount()) { + mTagContainerLayout1.removeTag(position); + } + } + }) + .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }) + .create(); + dialog.show(); } @Override @@ -133,25 +121,6 @@ public void onTagClick(int position, String text) { @Override public void onTagLongClick(final int position, String text) { -// AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) -// .setTitle("long click") -// .setMessage("You will delete this tag!") -// .setPositiveButton("Delete", new DialogInterface.OnClickListener() { -// @Override -// public void onClick(DialogInterface dialog, int which) { -// if (position < mTagContainerLayout1.getChildCount()) { -// mTagContainerLayout1.removeTag(position); -// } -// } -// }) -// .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { -// @Override -// public void onClick(DialogInterface dialog, int which) { -// dialog.dismiss(); -// } -// }) -// .create(); -// dialog.show(); mTagContainerLayout3.setTagViewSelectedState(true, position); TagView tagView = (TagView)mTagContainerLayout3.getChildAt(position); From 7d4e933b49df474ce20f8e10af09dd6545b05de6 Mon Sep 17 00:00:00 2001 From: Kamui Date: Tue, 12 Jun 2018 10:10:09 +0700 Subject: [PATCH 06/31] move some select logic from sample module to the library --- .../androidtagview/TagContainerLayout.java | 20 ++++++++++--- .../java/co/lujun/androidtagview/TagView.java | 29 ++++++++++++++++--- .../java/co/lujun/androidtagview/Utils.java | 19 ++++++++++++ .../java/co/lujun/sample/MainActivity.java | 18 +----------- 4 files changed, 61 insertions(+), 25 deletions(-) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index 0c3d3aa..9e1d6f0 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -558,6 +558,8 @@ private void initTagView(TagView tagView, int position) { } tagView.setTagBackgroundColor(colors[0]); + //TODO make selectedBackgroundColorSelectable configurable + tagView.setTagSelectedBackgroundColor(Utils.manipulateColorBrigthness(colors[0], 0.5f)); tagView.setTagBorderColor(colors[1]); tagView.setTagTextColor(colors[2]); tagView.setTagMaxLength(mTagMaxLength); @@ -819,13 +821,23 @@ public void setOnTagClickListener(TagView.OnTagClickListener listener) { } /** - * Toggle TagView's selected state. + * Select a tag * - * @param isSelected, position + * @param position + */ + public void selectTagView(int position) { + if (isTagViewSelectable) + ((TagView)mChildViews.get(position)).selectView(); + } + + /** + * Unselect a tag + * + * @param position */ - public void setTagViewSelectedState(boolean isSelected, int position) { + public void unselectTagView(int position) { if (isTagViewSelectable) - ((TagView)mChildViews.get(position)).setIsViewSelected(isSelected); + ((TagView)mChildViews.get(position)).unselectView(); } /** diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java index 7dcf3de..5f46349 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java @@ -60,6 +60,9 @@ public class TagView extends View { /** TagView background color*/ private int mBackgroundColor; + /** TagView background color*/ + private int mSelectedBackgroundColor; + /** TagView text color*/ private int mTextColor; @@ -207,7 +210,7 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) { protected void onDraw(Canvas canvas) { // draw background mPaint.setStyle(Paint.Style.FILL); - mPaint.setColor(mBackgroundColor); + mPaint.setColor(getIsViewSelected() ? mSelectedBackgroundColor : mBackgroundColor); canvas.drawRoundRect(mRectF, mBorderRadius, mBorderRadius, mPaint); // draw border @@ -433,10 +436,18 @@ public int getTagBackgroundColor(){ return mBackgroundColor; } + public int getTagSelectedBackgroundColor(){ + return mSelectedBackgroundColor; + } + public void setTagBackgroundColor(int color){ this.mBackgroundColor = color; } + public void setTagSelectedBackgroundColor(int color){ + this.mSelectedBackgroundColor = color; + } + public void setTagBorderColor(int color){ this.mBorderColor = color; } @@ -474,9 +485,19 @@ public void setIsViewSelectable(boolean viewSelectable) { isViewSelectable = viewSelectable; } - public void setIsViewSelected(boolean isSelected) { - if (isViewSelectable) - this.isViewSelected = isSelected; + //TODO change background color + public void selectView() { + if (isViewSelectable && !getIsViewSelected()) { + this.isViewSelected = true; + postInvalidate(); + } + } + + public void unselectView() { + if (isViewSelectable && getIsViewSelected()) { + this.isViewSelected = false; + postInvalidate(); + } } public interface OnTagClickListener{ diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java b/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java index 6691bcf..c63ba6a 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java @@ -17,6 +17,7 @@ package co.lujun.androidtagview; import android.content.Context; +import android.graphics.Color; /** * Author: lujun(http://blog.lujun.co) @@ -34,4 +35,22 @@ public static float sp2px(Context context, float sp) { final float scale = context.getResources().getDisplayMetrics().scaledDensity; return sp * scale; } + + /** + *Manipulate Birghtness of color + * + * @params color in int, brightness factor + * + * @return int + */ + public static int manipulateColorBrigthness(int color, float factor) { + int a = Color.alpha(color); + int r = Math.round(Color.red(color) * factor); + int g = Math.round(Color.green(color) * factor); + int b = Math.round(Color.blue(color) * factor); + return Color.argb(a, + Math.min(r,255), + Math.min(g,255), + Math.min(b,255)); + } } diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index 8a68920..ddfa9b0 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -121,13 +121,7 @@ public void onTagClick(int position, String text) { @Override public void onTagLongClick(final int position, String text) { - mTagContainerLayout3.setTagViewSelectedState(true, position); - - TagView tagView = (TagView)mTagContainerLayout3.getChildAt(position); - int color = tagView.getTagBackgroundColor(); - color = manipulateColor(color,0.3f); - tagView.setTagBackgroundColor(color); - tagView.invalidate(); + mTagContainerLayout3.selectTagView(position); List selectedPositions = mTagContainerLayout3.getSelectedTagViewPositions(); Toast.makeText(MainActivity.this, "selected-positions:" + selectedPositions.toString(), @@ -199,16 +193,6 @@ public void onClick(View v) { // recyclerView.setAdapter(adapter); } - public int manipulateColor(int color, float factor) { - int a = Color.alpha(color); - int r = Math.round(Color.red(color) * factor); - int g = Math.round(Color.green(color) * factor); - int b = Math.round(Color.blue(color) * factor); - return Color.argb(a, - Math.min(r,255), - Math.min(g,255), - Math.min(b,255)); - } public class TagRecyclerViewAdapter extends RecyclerView.Adapter { From f578f6ac02214ed4bb5b3d8adefd0cc2b2c1f0fe Mon Sep 17 00:00:00 2001 From: Kamui Date: Tue, 12 Jun 2018 10:15:10 +0700 Subject: [PATCH 07/31] add toggle select tag method --- .../lujun/androidtagview/TagContainerLayout.java | 16 ++++++++++++++++ .../main/java/co/lujun/sample/MainActivity.java | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index 9e1d6f0..dab44e1 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -820,6 +820,22 @@ public void setOnTagClickListener(TagView.OnTagClickListener listener) { invalidateTags(); } + /** + * Toggle select a tag + * + * @param position + */ + public void toggleSelectTagView(int position) { + if (isTagViewSelectable){ + TagView tagView = ((TagView)mChildViews.get(position)); + if (tagView.getIsViewSelected()){ + unselectTagView(position); + } else { + selectTagView(position); + } + } + } + /** * Select a tag * diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index ddfa9b0..a92f62f 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -121,7 +121,7 @@ public void onTagClick(int position, String text) { @Override public void onTagLongClick(final int position, String text) { - mTagContainerLayout3.selectTagView(position); + mTagContainerLayout3.toggleSelectTagView(position); List selectedPositions = mTagContainerLayout3.getSelectedTagViewPositions(); Toast.makeText(MainActivity.this, "selected-positions:" + selectedPositions.toString(), From 7c81776964a1a3ecc54c74fa1a335cc96430a941 Mon Sep 17 00:00:00 2001 From: Kamui Date: Tue, 12 Jun 2018 10:47:04 +0700 Subject: [PATCH 08/31] fix spelling --- .../co/lujun/androidtagview/TagContainerLayout.java | 10 +++++----- .../src/main/java/co/lujun/androidtagview/TagView.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index dab44e1..5df1811 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -829,9 +829,9 @@ public void toggleSelectTagView(int position) { if (isTagViewSelectable){ TagView tagView = ((TagView)mChildViews.get(position)); if (tagView.getIsViewSelected()){ - unselectTagView(position); + tagView.deselectView(); } else { - selectTagView(position); + tagView.selectView(); } } } @@ -847,13 +847,13 @@ public void selectTagView(int position) { } /** - * Unselect a tag + * Deselect a tag * * @param position */ - public void unselectTagView(int position) { + public void deselectTagView(int position) { if (isTagViewSelectable) - ((TagView)mChildViews.get(position)).unselectView(); + ((TagView)mChildViews.get(position)).deselectView(); } /** diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java index 5f46349..426de42 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java @@ -493,7 +493,7 @@ public void selectView() { } } - public void unselectView() { + public void deselectView() { if (isViewSelectable && getIsViewSelected()) { this.isViewSelected = false; postInvalidate(); From c3bc26e380f222d29022caa1277a296c917974bf Mon Sep 17 00:00:00 2001 From: Kamui Date: Tue, 12 Jun 2018 10:55:20 +0700 Subject: [PATCH 09/31] deselect all tags when click on an unselected tag --- .../src/main/java/co/lujun/sample/MainActivity.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index a92f62f..c7a9fc9 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -117,6 +117,18 @@ public void onTagCrossClick(int position) { mTagContainerLayout3.setOnTagClickListener(new TagView.OnTagClickListener() { @Override public void onTagClick(int position, String text) { + List selectedPositions = mTagContainerLayout3.getSelectedTagViewPositions(); + //deselect all tags when click on an unselected tag. Otherwise show toast. + if (selectedPositions.isEmpty() || selectedPositions.contains(position)){ + Toast.makeText(MainActivity.this, "click-position:" + position + ", text:" + text, + Toast.LENGTH_SHORT).show(); + } else { + //deselect all tags + for (int i : selectedPositions){ + mTagContainerLayout3.deselectTagView(i); + } + } + } @Override From a0c3782c3bc9f22268c42ee10bd6597853b32e42 Mon Sep 17 00:00:00 2001 From: Kamui Date: Tue, 12 Jun 2018 12:57:57 +0700 Subject: [PATCH 10/31] fix spelling --- androidtagview/src/main/java/co/lujun/androidtagview/Utils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java b/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java index c63ba6a..7997564 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java @@ -39,7 +39,7 @@ public static float sp2px(Context context, float sp) { /** *Manipulate Birghtness of color * - * @params color in int, brightness factor + * @param color in int, brightness factor * * @return int */ From d77e47f9dbddc8d37ab47335073b1bd4f5a5f588 Mon Sep 17 00:00:00 2001 From: Kamui Date: Tue, 12 Jun 2018 15:58:59 +0700 Subject: [PATCH 11/31] change shade of selected background to be less dark --- .../main/java/co/lujun/androidtagview/TagContainerLayout.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index 5df1811..6b4945e 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -559,7 +559,7 @@ private void initTagView(TagView tagView, int position) { tagView.setTagBackgroundColor(colors[0]); //TODO make selectedBackgroundColorSelectable configurable - tagView.setTagSelectedBackgroundColor(Utils.manipulateColorBrigthness(colors[0], 0.5f)); + tagView.setTagSelectedBackgroundColor(Utils.manipulateColorBrigthness(colors[0], 0.7f)); tagView.setTagBorderColor(colors[1]); tagView.setTagTextColor(colors[2]); tagView.setTagMaxLength(mTagMaxLength); From ae8503bd4ca474cff4fa714d85416d4c5e5621f2 Mon Sep 17 00:00:00 2001 From: Kamui Date: Tue, 12 Jun 2018 16:07:15 +0700 Subject: [PATCH 12/31] add getSelectedTagViewText() --- androidtagview/build.gradle | 4 +++- .../androidtagview/TagContainerLayout.java | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/androidtagview/build.gradle b/androidtagview/build.gradle index b819a0e..7b1d047 100644 --- a/androidtagview/build.gradle +++ b/androidtagview/build.gradle @@ -23,4 +23,6 @@ dependencies { testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:25.0.1' } -apply from: 'https://raw.githubusercontent.com/whilu/AndroidPublishLibrary/master/project/library/bintray_publish.gradle' \ No newline at end of file +//TODO fix bug apply from: 'https://raw.githubusercontent.com/whilu/AndroidPublishLibrary/master/project/library/bintray_publish.gradle' +//https://github.com/google/ExoPlayer/commit/13592dfb53ec99ce1fdb2744e34717dbdec9dea8 +//https://github.com/davideas/FlexibleAdapter/issues/579 \ No newline at end of file diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index 6b4945e..c762662 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -857,7 +857,7 @@ public void deselectTagView(int position) { } /** - * Return selected TagView + * Return selected TagView positions * * @return list of selected positions */ @@ -871,6 +871,22 @@ public List getSelectedTagViewPositions() { return selectedPositions; } + /** + * Return selected TagView text + * + * @return list of selected tag text + */ + public List getSelectedTagViewText() { + List selectedTagText = new ArrayList<>(); + for (int i = 0; i < mChildViews.size(); i++){ + TagView tagView = (TagView)mChildViews.get(i); + if ((tagView.getIsViewSelected())){ + selectedTagText.add(tagView.getText()); + } + } + return selectedTagText; + } + /** * Get TagView text. * From dc1a07f90e61b4b63f5db718c6dbf82f8972b103 Mon Sep 17 00:00:00 2001 From: Kamui Date: Thu, 14 Jun 2018 09:16:44 +0700 Subject: [PATCH 13/31] update to newer gradle and sdk version --- androidtagview/build.gradle | 14 +++++++------- build.gradle | 4 +++- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/build.gradle | 18 +++++++++--------- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/androidtagview/build.gradle b/androidtagview/build.gradle index 7b1d047..6fffe2f 100644 --- a/androidtagview/build.gradle +++ b/androidtagview/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 25 - buildToolsVersion "25.0.0" + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { - minSdkVersion 9 - targetSdkVersion 25 + minSdkVersion 14 + targetSdkVersion 27 versionCode 114 versionName "1.1.4" } @@ -19,9 +19,9 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.0.1' + implementation fileTree(dir: 'libs', include: ['*.jar']) + testImplementation 'junit:junit:4.12' + implementation 'com.android.support:appcompat-v7:27.1.1' } //TODO fix bug apply from: 'https://raw.githubusercontent.com/whilu/AndroidPublishLibrary/master/project/library/bintray_publish.gradle' //https://github.com/google/ExoPlayer/commit/13592dfb53ec99ce1fdb2744e34717dbdec9dea8 diff --git a/build.gradle b/build.gradle index 45efda8..cd5647f 100644 --- a/build.gradle +++ b/build.gradle @@ -3,9 +3,10 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.2' + classpath 'com.android.tools.build:gradle:3.1.3' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0' @@ -17,6 +18,7 @@ buildscript { allprojects { repositories { jcenter() + google() } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c4e826c..52aba3d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Oct 30 18:08:28 CST 2016 +#Thu Jun 14 09:04:10 ICT 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 9435b08..1ac8d94 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 - buildToolsVersion "25.0.0" + compileSdkVersion 27 + buildToolsVersion "27.0.3" defaultConfig { applicationId "co.lujun.sample" - minSdkVersion 9 - targetSdkVersion 25 + minSdkVersion 14 + targetSdkVersion 27 versionCode 1 versionName "1.0" } @@ -20,9 +20,9 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile project(':androidtagview') - testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.0.1' - compile 'com.android.support:design:25.0.1' + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation project(':androidtagview') + testImplementation 'junit:junit:4.12' + implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'com.android.support:design:27.1.1' } From caf6b35a81675b6b4c7a0dd90e2413cc191c230d Mon Sep 17 00:00:00 2001 From: Kamui Date: Sun, 17 Jun 2018 10:43:10 +0700 Subject: [PATCH 14/31] add function to return size of the layout --- .../java/co/lujun/androidtagview/TagContainerLayout.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index c762662..c6da37d 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -887,6 +887,15 @@ public List getSelectedTagViewText() { return selectedTagText; } + /** + * Return number of child tags + * + * @return size + */ + public int size() { + return mChildViews.size(); + } + /** * Get TagView text. * From bfe178fe7cbe25555d918539e40277f2e8cfcd9b Mon Sep 17 00:00:00 2001 From: Kamui Date: Sun, 17 Jun 2018 14:42:36 +0700 Subject: [PATCH 15/31] add onSelectedTagDrag() method to drag selected tag --- .../src/main/java/co/lujun/androidtagview/TagView.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java index 426de42..dd5d3b0 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java @@ -266,8 +266,8 @@ public boolean dispatchTouchEvent(MotionEvent event) { break; case MotionEvent.ACTION_MOVE: - if (Math.abs(mLastY - y) > mSlopThreshold - || Math.abs(mLastX - x) > mSlopThreshold){ + if (!isViewSelected && (Math.abs(mLastY - y) > mSlopThreshold + || Math.abs(mLastX - x) > mSlopThreshold)){ if (getParent() != null) { getParent().requestDisallowInterceptTouchEvent(false); } @@ -313,6 +313,9 @@ public boolean onTouchEvent(MotionEvent event) { } if (Math.abs(mLastX - x) > mMoveSlop || Math.abs(mLastY - y) > mMoveSlop){ isMoved = true; + if (isViewSelected){ + mOnTagClickListener.onSelectedTagDrag((int) getTag(), getText()); + } } break; @@ -503,6 +506,7 @@ public void deselectView() { public interface OnTagClickListener{ void onTagClick(int position, String text); void onTagLongClick(int position, String text); + void onSelectedTagDrag(int position, String text); void onTagCrossClick(int position); } From 85832b62cec0c8dd1b830b7a9f4605813039da01 Mon Sep 17 00:00:00 2001 From: Kamui Date: Sun, 17 Jun 2018 14:51:48 +0700 Subject: [PATCH 16/31] add onSelectedTagDrag() to sample app --- .../java/co/lujun/sample/MainActivity.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index c7a9fc9..5efb065 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -1,11 +1,10 @@ package co.lujun.sample; import android.app.AlertDialog; +import android.content.ClipData; import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; @@ -106,6 +105,10 @@ public void onClick(DialogInterface dialog, int which) { dialog.show(); } + @Override + public void onSelectedTagDrag(int position, String text) { + } + @Override public void onTagCrossClick(int position) { // mTagContainerLayout1.removeTag(position); @@ -119,12 +122,12 @@ public void onTagCrossClick(int position) { public void onTagClick(int position, String text) { List selectedPositions = mTagContainerLayout3.getSelectedTagViewPositions(); //deselect all tags when click on an unselected tag. Otherwise show toast. - if (selectedPositions.isEmpty() || selectedPositions.contains(position)){ + if (selectedPositions.isEmpty() || selectedPositions.contains(position)) { Toast.makeText(MainActivity.this, "click-position:" + position + ", text:" + text, Toast.LENGTH_SHORT).show(); } else { //deselect all tags - for (int i : selectedPositions){ + for (int i : selectedPositions) { mTagContainerLayout3.deselectTagView(i); } } @@ -140,6 +143,14 @@ public void onTagLongClick(final int position, String text) { Toast.LENGTH_SHORT).show(); } + @Override + public void onSelectedTagDrag(int position, String text) { + ClipData clip = ClipData.newPlainText("Text", text); + View view = mTagContainerLayout3.getTagView(position); + View.DragShadowBuilder shadow = new View.DragShadowBuilder(view); + view.startDrag(clip, shadow, Boolean.TRUE, 0); + } + @Override public void onTagCrossClick(int position) { } From 0eb6a8892450cf437b54b55773e5a5ec4fcb1765 Mon Sep 17 00:00:00 2001 From: Do Tuan Anh Date: Tue, 10 Jul 2018 17:22:15 +0700 Subject: [PATCH 17/31] add method to remove TagView in multiple consecutive positions --- .../androidtagview/TagContainerLayout.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index c6da37d..0e3270b 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -33,6 +33,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import static co.lujun.androidtagview.Utils.dp2px; @@ -605,6 +606,21 @@ private void onRemoveTag(int position) { // TODO, make removed view null? } + private void onRemoveConsecutiveTags(List positions) { + int smallestPosition = Collections.min(positions); + for (int position : positions) { + if (position < 0 || position >= mChildViews.size()) { + throw new RuntimeException("Illegal position!"); + } + mChildViews.remove(smallestPosition); + removeViewAt(smallestPosition); + } + for (int i = smallestPosition; i < mChildViews.size(); i++) { + mChildViews.get(i).setTag(i); + } + // TODO, make removed view null? + } + private int[] onGetNewPosition(View view) { int left = view.getLeft(); int top = view.getTop(); @@ -801,6 +817,16 @@ public void removeTag(int position) { postInvalidate(); } + /** + * Remove TagView in multiple consecutive positions. + * + * + */ + public void removeConsecutiveTags(List positions) { + onRemoveConsecutiveTags(positions); + postInvalidate(); + } + /** * Remove all TagViews. */ From 037e752005f594bfe4bec24ae14e516e47c9e58d Mon Sep 17 00:00:00 2001 From: Matt Cleinman Date: Wed, 15 Aug 2018 16:16:19 -0700 Subject: [PATCH 18/31] images working --- .../androidtagview/TagContainerLayout.java | 30 +++++++++++++++- .../java/co/lujun/androidtagview/TagView.java | 34 ++++++++++++++++++ sample/build.gradle | 6 ++++ sample/src/main/AndroidManifest.xml | 2 +- .../java/co/lujun/sample/MainActivity.java | 20 +++++++++++ .../src/main/res/drawable/yellow_avatar.png | Bin 0 -> 4577 bytes 6 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 sample/src/main/res/drawable/yellow_avatar.png diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index 54ee53e..605b3a4 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -164,6 +164,11 @@ public class TagContainerLayout extends ViewGroup { */ private List mTags; + /** + * Default image for new tags + */ + private int mDefaultImageDrawableID = -1; + /** * Can drag TagView(default false) */ @@ -525,7 +530,12 @@ private void onAddTag(String text, int position) { if (position < 0 || position > mChildViews.size()) { throw new RuntimeException("Illegal position!"); } - TagView tagView = new TagView(getContext(), text); + TagView tagView; + if (mDefaultImageDrawableID != -1) { + tagView = new TagView(getContext(), text, mDefaultImageDrawableID); + } else { + tagView = new TagView(getContext(), text); + } initTagView(tagView, position); mChildViews.add(position, tagView); if (position < mChildViews.size()) { @@ -1000,6 +1010,24 @@ public void setSensitivity(float sensitivity) { this.mSensitivity = sensitivity; } + /** + * Get default tag image + * + * @return + */ + public int getDefaultImageDrawableID() { + return mDefaultImageDrawableID; + } + + /** + * Set default image for tags. + * + * @param imageID + */ + public void setDefaultImageDrawableID(int imageID) { + this.mDefaultImageDrawableID = imageID; + } + /** * Set max line count for TagContainerLayout * diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java index 9afd66d..a75f402 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java @@ -19,11 +19,15 @@ import android.animation.ValueAnimator; import android.annotation.TargetApi; import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; import android.graphics.Region; +import android.graphics.Shader; import android.graphics.Typeface; import android.os.Build; import android.support.v4.widget.ViewDragHelper; @@ -119,6 +123,8 @@ public class TagView extends View { private ValueAnimator mRippleValueAnimator; + private Bitmap mBitmapImage; + private boolean mEnableCross; private float mCrossAreaWidth; @@ -149,6 +155,12 @@ public TagView(Context context, String text){ init(context, text); } + public TagView(Context context, String text, int defaultImageID){ + super(context); + init(context, text); + mBitmapImage = BitmapFactory.decodeResource(getResources(), defaultImageID); + } + private void init(Context context, String text){ mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mRipplePaint = new Paint(Paint.ANTI_ALIAS_FLAG); @@ -239,6 +251,9 @@ protected void onDraw(Canvas canvas) { // draw cross drawCross(canvas); + + // draw image + drawImage(canvas); } @Override @@ -326,6 +341,18 @@ private boolean isClickCrossArea(MotionEvent event){ return event.getX() >= getWidth() - mCrossAreaWidth; } + private void drawImage(Canvas canvas){ + if (isEnableImage()) { + Bitmap scaledImageBitmap = Bitmap.createScaledBitmap(mBitmapImage, Math.round(getHeight() - mBorderWidth), Math.round(getHeight() - mBorderWidth), false); + + Paint paint = new Paint(); + paint.setAntiAlias(true); + paint.setShader(new BitmapShader(scaledImageBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); + RectF rect = new RectF(mBorderWidth, mBorderWidth, getHeight() - mBorderWidth, getHeight() - mBorderWidth); + canvas.drawRoundRect(rect, rect.height()/2, rect.height()/2, paint); + } + } + private void drawCross(Canvas canvas){ if (isEnableCross()){ mCrossAreaPadding = mCrossAreaPadding > getHeight() / 2 ? getHeight() / 2 : @@ -456,6 +483,11 @@ public void setIsViewClickable(boolean clickable) { this.isViewClickable = clickable; } + public void setImage(Bitmap newImage) { + this.mBitmapImage = newImage; + this.invalidate(); + } + public interface OnTagClickListener{ void onTagClick(int position, String text); void onTagLongClick(int position, String text); @@ -491,6 +523,8 @@ public void setBdDistance(float bdDistance) { this.bdDistance = bdDistance; } + public boolean isEnableImage() { return mBitmapImage != null; } + public boolean isEnableCross() { return mEnableCross; } diff --git a/sample/build.gradle b/sample/build.gradle index 9435b08..560f4c3 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -19,10 +19,16 @@ android { } } +repositories { + mavenCentral() + maven { url 'https://maven.google.com' } +} + dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile project(':androidtagview') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:25.0.1' compile 'com.android.support:design:25.0.1' + compile 'com.github.bumptech.glide:glide:4.1.1' } diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index b96d3e8..e56e5f9 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -19,5 +19,5 @@ - + diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index 3253051..796b22e 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -3,6 +3,7 @@ import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; +import android.graphics.Bitmap; import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; @@ -21,6 +22,10 @@ import co.lujun.androidtagview.TagContainerLayout; import co.lujun.androidtagview.TagView; +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.transition.Transition; +import com.bumptech.glide.request.target.SimpleTarget; + public class MainActivity extends AppCompatActivity { private TagContainerLayout mTagContainerLayout1, mTagContainerLayout2, @@ -73,6 +78,8 @@ protected void onCreate(Bundle savedInstanceState) { mTagContainerLayout4 = (TagContainerLayout) findViewById(R.id.tagcontainerLayout4); mTagcontainerLayout5 = (TagContainerLayout) findViewById(R.id.tagcontainerLayout5); + mTagContainerLayout1.setDefaultImageDrawableID(R.drawable.yellow_avatar); + // Set custom click listener mTagContainerLayout1.setOnTagClickListener(new TagView.OnTagClickListener() { @Override @@ -132,6 +139,19 @@ public void onTagCrossClick(int position) { // After you set your own attributes for TagView, then set tag(s) or add tag(s) mTagContainerLayout1.setTags(list1); + for (int i=0; i() { + @Override + public void onResourceReady(Bitmap resource, Transition transition) { + mTagContainerLayout1.getTagView(index).setImage(resource); + } + }); + } + mTagContainerLayout2.setTags(list2); mTagContainerLayout3.setTags(list3); mTagContainerLayout4.setTags(list4); diff --git a/sample/src/main/res/drawable/yellow_avatar.png b/sample/src/main/res/drawable/yellow_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..605a8e794e969f5b22a0ff64bcd0146297b5b6d5 GIT binary patch literal 4577 zcmbtYc{o(<|E5N^EQLYJ`dTtWQ7CKC$d=t0`e*SSAcbB>VU1{a(NS-s}2a*YA&WpYxpMIiJsYp3i;X&xtiRz0SpPii3%XiObO7 znk5qxbJF3)b_6)XLw%hN?1Y10h#)J!TS0eS1JF!Y-TY8!aYJ8MceEwi)h*P&6RpX_ zbmF1mwX4?m#u-!{pXZ~KA68}BC^9lKwXs(WJd@;ukKdG4o-|$PSikk?>{FBTDY3~W z=pGFv)lXlPGUZ7h0)inn7=2yXBTyl?DtGkeOHIeyuXl}!GxUDClpD*!A~-W}Eut@U zw?(*auV#bg3i!Clkt;+d5GOB`iE@M&`sWyc!(#wIod4s+|M|v$dqqd8RP=*~!V8m$ zI;*f?`t1euOy0rHig}|=R{S~jg0$Z^nNC2rbJue%A|hp*tXC!zM@NgdPa9TAx@v@% z6Qtbhn}hXwW4Nf16UrRBPLGO5>&<=7<5T(U`N69$xJ52CtPkeh#8yZn3~)XY|G-}|_T7cmih{B>e&{92=Z*M93|btK??iZe zs<^A`Img~7`F{PXS5ko~*Rp=Ui+0Rpma=it+J_U~f8H6$6^d)RePNksP#G4EuJfm; z(KXDTcyFYOj#o5GDv010WCiLQk!Fz5jHpZE<{PbZM$3N0>tc%DpG_xh9D!cIj@tH)@V&>QcM3PgnBC)zfMDPSSmlmQ4eJtr|5cyuGiUt_^RtHjl?9tvv@(%-+wnYiu?KtxBlh=6=pvtbG>MxF7FtKyZ^OK`@N8 z=`EM?)66zbK%Fl)29MDz3LQ<73JqDXRENK^EP5WL%BTsm;J?LO_0vT^DLf6re>7Dk zZ*nCOI898_{CP_yOM>BhACU7cFIroKSt;_T)%UVZ@4@N$1tqwzd497H_(PAbxFUPMauVaO?$w zT!Pd0{j#Z<{H42hTt@h%5DCXqQIy<5{kqMFXC^DH{NYwG;@Sr)gfAX>8H&th;iO;9 z;9$Y0?lv9y6puu=rS6=1BSH!2Yz^WBH(FC`mzcll#x8_(TM`}plor_F**1oRqC#I*vi2^%n}n`iM;bMjMAL)%AA8oGOlB zVuP!`>w0^Pa!6=Eg6ajr50OA`BM|Tdq-!T?k)^w&bw~=~Nso}UN(2&1=q~-gNXl)O zlYvKp%VQtUl+|z9Ur}06+Gx89q;Of;o!3Mi7)akuWnll`JWFk|f;IBYQFVTMAIpi2JdF-njWLa{dW_CEorsc=Zjj6c7N!G)#|vphuRo+$P4s3~{NJpnD$&0uBW zjA1b$Aq7515BtQOC@uZQJxcxBK}vPh85BPpCr6O?6+u@ubl}-H!@ul^0Ui-S1LCQ0 z5JcpVg@R^HOp3lNV{l(u8@0naFU@*~2Y12@hyhCjB-oOMnQcz0`HVP1)$X&i#2;h_ ztJ+oBvZdSr12~fNa_1pwsZF9Dwe1)H%uJw5?Le746iqW+8UbrC5&`kWAklh(ZY#;z ziyg00mC2sEM23Ml+Dxd-r3(l|P;qA^nrAVsD*^BxJO+aQ0e4K*n#)Ar#%W zLmU*^*WR`FuGuXgN^r=5n>=l0JMS0UaUa4l7#P`9QJbD``^;>^e*_HOF0x2F@TJM> zD6gfVm~IMbbt@u%-{Ok^VaaFQ@6S&$x8z)gyN`ZcZdb@la;ofGTz`(0qV7b~@&NHN zz{TUvfRBDUowgIaCU`eNM?PBam=S?NGJnJ>jJC4&hQqJS#OTcbodyufj!j*>=S$hem)X%zmhE@ zgK#q$@>*ONoc$F~bAwn`YKJWVv%yS(4O}5@^IwSSAGzio8W4U~jOSH|(S@aOvVv|2 z2&;+zqkgNe2BM>_c4hfir0lp0 zIh`k=6dHLBV83=iR@Fa$`ALfLO6c*mnV+#Kx+a&VC-M`|!?MQb#_nxc zb+Lh2`RfUbKQ)qx0h^Hx`ebb#*W|+Ae6HhT;l5`sFZJ!T-e)_we%wt7q~@pCFk-=V#FWFXO@s6%R}hI-*TA*o@rW>K-MFeLcvx+ODvA zwbeg*p`3h-f|>#pvvD+grm`Zi5bz&iTlv5slphShL#s4`ay1!L?ny8q0tJW4Lz7pK)jG>NQ0au;)zh$mDD->vx{--o9GUjW8ltZ8|TLL0AS%e*EG#gMKd}BC$bS z5;0J|oJXhGG=Q+{fNw#`3Y5dJL#(vnqMr6X2yOUGnFuch^&`D_G*kJMSkeoKvu`~J z+YG1HIz&||kL;7C%tU6*@S62DTV?)1lhiOu?)RPI&SmMC_oAXgqt^wOYeCq_>>a=m z{j!P}5A=l#W`J3+{kWj6z2fE*y+&PVIS@8NY!5Inp5ZGEY<10t<|Xg279C0qY@D-y z^rXypIJ$L58x!w2F!E740>uGpTE3`kfw4HPm$J1W&O#mfH4sFqSbd9LX@Gm(k<>BL zJY(x-OytNPvAZE!sLU^n)BG?uQwM?^6vsK?!WXxADRI;kA9lDl&jY|VeX*GfsNO&_ z>hyAvbFwxoHgj3w4glL02*wu|8p|H+PMY(#09}fmaad=1ghclb{Tl3?-xP(*y($`R z9v{A*hmF=HR=ggu%Zv;dkjjC9-J2`Ya=PNsxMfx5z1nWAAHLhP@j(g2p%Ad(>=I8Xw)usXXraM4He7RE74_YJTEd|n} zDrrYip)HcJ1*oI9V^ligap_A8Z2D>l;^73MSYYSb#MA2GislMZ6TF)ntCs2I{Fan! z>p(!5MmKTeT_B8}`B1gd1p++u*W_;nokt!q!^V7sx$;r61td%nYy(x$5jlrwv}m%*WZ@As94jbgoy9jwcmTwf8pY3|MD`ip0x{M$|fes9A|#l-iVFzX;RrO4ZB z;31lPBf7@h;u~^#r0dKLW$93tqK;m958^ZXP`#uc!%20h&)aD1f_ z_WN$*EA#__wI}AKNP+trH?sJDR_XtZDS&&VAd3b50rL>%BOJpT%|n2H=edHIh=17 z-_`J)xk56rV%p139ezU(s5Kys_4`Fm zq*DezRa8=n{Mq!X#j2m`HkISWeH%2~Vm6#f(8$c)R@w&)f2ogwwnc|S%yGxH=p3^^ zzS2a$rtk4n0U}w$%2M>X1Apu6{i)twsQ% z=Pt5(70a^j5j0@_(T~)FBGr1%8GJsv@hi?H)a)SPZ$SPh7fH>FX$X^Fi|cv;^s59A zezU!KYJW9qQY$|Ob-6V+;CRqqjJ(A@>Lt-O{OhkD?B~WV9SbvV=UzIWV$YcNt^A!4 zk5kK8Ci+woNfpgaa8413MyaN6rKz7&SumW7<@?a-wD9vGP9-1+44|82g?_J9Tk3RJ zeplhR`pGw@(5^$d9Bg?;Y!1+E5$2^V(%DyMvqu4w%LRKKWORWi(S?LRS!$v_+@M+; z(Hu{Z1iaSh^>bT4f+<~9MZ-g%3Z6$r`pE?_rdRQa2@2aCT9mHXOCoLTN`0}>lJ2y1 zLH8>uzz*K&9hv=Q>DH~Vb?DoqY=9-7r8I&CH}Om?s*b_@hHxg>3`heTqR?QJ#~K0YlJCC_7tDocS@1%+^BhU^H3`)n0onJ|y%(nJ;D_o83EDej5oJ6E zD`vi8TJ#B7L_UmB<&~M;KCYvF{=N3Pug!b!gp5EjC!)bd6@;cz_oaL|w-q8O5IQcJ zhP6#UOOXs;Ezu_PX_ODR<5yw(3Go&MBgt>ST+cJ7(>Rk)Lf52J9g_*kE8oYKN0)Si zja=FUwbh)6awGc?dHCV_J$YsCotDGY+1{4yqQSmNyw(dOJJ|1glhL_sMx&~{MtwbT zwmf1lQU58R{F3_1Yhx?sT3dK3AEuSQ(($Z(v+5>U%;VGg+>(0^BNY(x?A>|y|M7pt izpW=aG7bchOt Date: Wed, 15 Aug 2018 17:08:38 -0700 Subject: [PATCH 19/31] Sizing complete for LTR languages --- .../src/main/java/co/lujun/androidtagview/TagView.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java index a75f402..2ddde1a 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java @@ -198,7 +198,6 @@ private void onDealText(){ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int height = mVerticalPadding * 2 + (int) fontH; - int width = mHorizontalPadding * 2 + (int) fontW + (isEnableCross() ? height : 0); mCrossAreaWidth = Math.min(Math.max(mCrossAreaWidth, height), width); setMeasuredDimension(width, height); } @@ -245,7 +244,7 @@ protected void onDraw(Canvas canvas) { } } else { canvas.drawText(mAbstractText, - (isEnableCross() ? getWidth() - getHeight() : getWidth()) / 2 - fontW / 2, + (isEnableCross() ? getWidth() - getHeight() : getWidth()) / 2 - fontW / 2 + (isEnableImage() ? getHeight() / 2 : 0), getHeight() / 2 + fontH / 2 - bdDistance, mPaint); } From 86cec3d11cf64f1e701bfd8f0c88264674b53950 Mon Sep 17 00:00:00 2001 From: Matt Cleinman Date: Wed, 15 Aug 2018 17:13:48 -0700 Subject: [PATCH 20/31] complete for LTR, check to prevent images on RTL --- .../src/main/java/co/lujun/androidtagview/TagView.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java index 2ddde1a..be878d0 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java @@ -198,6 +198,7 @@ private void onDealText(){ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int height = mVerticalPadding * 2 + (int) fontH; + int width = mHorizontalPadding * 2 + (int) fontW + (isEnableCross() ? height : 0) + (isEnableImage() ? height : 0); mCrossAreaWidth = Math.min(Math.max(mCrossAreaWidth, height), width); setMeasuredDimension(width, height); } @@ -522,7 +523,7 @@ public void setBdDistance(float bdDistance) { this.bdDistance = bdDistance; } - public boolean isEnableImage() { return mBitmapImage != null; } + public boolean isEnableImage() { return mBitmapImage != null && mTextDirection != View.TEXT_DIRECTION_RTL; } public boolean isEnableCross() { return mEnableCross; From 1b49e1305aa80f606a7bdf450a29b0166dda43d8 Mon Sep 17 00:00:00 2001 From: Matt Cleinman Date: Thu, 16 Aug 2018 14:25:46 -0700 Subject: [PATCH 21/31] PR feedback --- .../java/co/lujun/sample/MainActivity.java | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index 796b22e..f6007f1 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -23,6 +23,7 @@ import co.lujun.androidtagview.TagView; import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.transition.Transition; import com.bumptech.glide.request.target.SimpleTarget; @@ -139,19 +140,7 @@ public void onTagCrossClick(int position) { // After you set your own attributes for TagView, then set tag(s) or add tag(s) mTagContainerLayout1.setTags(list1); - for (int i=0; i() { - @Override - public void onResourceReady(Bitmap resource, Transition transition) { - mTagContainerLayout1.getTagView(index).setImage(resource); - } - }); - } - + loadImages(list1); mTagContainerLayout2.setTags(list2); mTagContainerLayout3.setTags(list3); mTagContainerLayout4.setTags(list4); @@ -192,6 +181,31 @@ public void onClick(View v) { // recyclerView.setAdapter(adapter); } + private void loadImages(List list) { + String[] avatars = new String[]{"https://forums.oneplus.com/data/avatars/m/231/231279.jpg", + "https://d1marr3m5x4iac.cloudfront.net/images/block/movies/17214/17214_aa.jpg", + "https://lh3.googleusercontent.com/-KSI1bJ1aVS4/AAAAAAAAAAI/AAAAAAAAB9c/Vrgt6WyS5OU/il/photo.jpg"}; + + for (int i=0; i() { + @Override + public void onResourceReady(Bitmap resource, Transition transition) { + mTagContainerLayout1.getTagView(index).setImage(resource); + } + }); + try { + Thread.sleep(50); + } catch (InterruptedException e) { + System.err.println(e.getMessage()); + } + } + } + public class TagRecyclerViewAdapter extends RecyclerView.Adapter { From fbbda6cedf909426871b8ea8c80b36b577a971dd Mon Sep 17 00:00:00 2001 From: Do Tuan Anh Date: Mon, 3 Sep 2018 16:49:00 +0700 Subject: [PATCH 22/31] [F] selected tag color does not show up when Tag background is black --- androidtagview/build.gradle | 2 +- .../androidtagview/TagContainerLayout.java | 5 ++-- .../java/co/lujun/androidtagview/Utils.java | 29 ++++++++++++------- sample/build.gradle | 2 +- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/androidtagview/build.gradle b/androidtagview/build.gradle index 6fffe2f..740549a 100644 --- a/androidtagview/build.gradle +++ b/androidtagview/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion '27.0.3' defaultConfig { - minSdkVersion 14 + minSdkVersion 21 targetSdkVersion 27 versionCode 114 versionName "1.1.4" diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index 0e3270b..b8df9ee 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -549,7 +549,7 @@ private void initTagView(TagView tagView, int position) { int[] colors; if (mColorArrayList != null && mColorArrayList.size() > 0) { if (mColorArrayList.size() == mTags.size() && - mColorArrayList.get(position).length >= 3) { + mColorArrayList.get(position).length >= 4) { colors = mColorArrayList.get(position); } else { throw new RuntimeException("Illegal color list!"); @@ -559,10 +559,9 @@ private void initTagView(TagView tagView, int position) { } tagView.setTagBackgroundColor(colors[0]); - //TODO make selectedBackgroundColorSelectable configurable - tagView.setTagSelectedBackgroundColor(Utils.manipulateColorBrigthness(colors[0], 0.7f)); tagView.setTagBorderColor(colors[1]); tagView.setTagTextColor(colors[2]); + tagView.setTagSelectedBackgroundColor(colors[3]); tagView.setTagMaxLength(mTagMaxLength); tagView.setTextDirection(mTagTextDirection); tagView.setTypeface(mTagTypeface); diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java b/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java index 7997564..012b6ab 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java @@ -37,20 +37,29 @@ public static float sp2px(Context context, float sp) { } /** - *Manipulate Birghtness of color - * - * @param color in int, brightness factor + * If the color is Dark -> make it lighter and vice versa * + * @param color in int, + * @param factor 0.0 < factor < 1.0 * @return int */ - public static int manipulateColorBrigthness(int color, float factor) { + public static int manipulateColorBrightness(int color, float factor) { int a = Color.alpha(color); - int r = Math.round(Color.red(color) * factor); - int g = Math.round(Color.green(color) * factor); - int b = Math.round(Color.blue(color) * factor); + int r = Color.red(color); + int g = Color.green(color); + int b = Color.blue(color); +// if (r + b + g < 128 * 3) factor = 1 / factor;// check if the color is bright or dark +// r = Math.round(r * factor); +// b = Math.round(b * factor); +// g = Math.round(g * factor); + if (r > 127) r = 255 - Math.round((255 - r) * factor); + if (g > 127) g = 255 - Math.round((255 - g) * factor); + if (b > 127) b = 255 - Math.round((255 - b) * factor); + return Color.argb(a, - Math.min(r,255), - Math.min(g,255), - Math.min(b,255)); + Math.min(r, 255), + Math.min(g, 255), + Math.min(b, 255) + ); } } diff --git a/sample/build.gradle b/sample/build.gradle index 1ac8d94..4347fad 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -6,7 +6,7 @@ android { defaultConfig { applicationId "co.lujun.sample" - minSdkVersion 14 + minSdkVersion 21 targetSdkVersion 27 versionCode 1 versionName "1.0" From c88cacee9edfd595621adbfa06409d3728034eb2 Mon Sep 17 00:00:00 2001 From: Do Tuan Anh Date: Mon, 12 Nov 2018 15:32:51 +0700 Subject: [PATCH 23/31] update Build version + migrate to androidX + fix default color not include selected background color --- androidtagview/build.gradle | 7 +++---- .../java/co/lujun/androidtagview/ColorFactory.java | 6 ++++-- .../co/lujun/androidtagview/TagContainerLayout.java | 12 +++++++++--- .../main/java/co/lujun/androidtagview/TagView.java | 3 ++- build.gradle | 2 +- gradle.properties | 2 ++ gradle/wrapper/gradle-wrapper.properties | 2 +- sample/build.gradle | 9 ++++----- .../src/main/java/co/lujun/sample/MainActivity.java | 10 +++++----- sample/src/main/res/layout/activity_main.xml | 10 +++++----- sample/src/main/res/layout/content_main.xml | 5 ++--- 11 files changed, 38 insertions(+), 30 deletions(-) diff --git a/androidtagview/build.gradle b/androidtagview/build.gradle index 740549a..2ed3e1c 100644 --- a/androidtagview/build.gradle +++ b/androidtagview/build.gradle @@ -1,12 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 27 - buildToolsVersion '27.0.3' + compileSdkVersion 28 defaultConfig { minSdkVersion 21 - targetSdkVersion 27 + targetSdkVersion 28 versionCode 114 versionName "1.1.4" } @@ -21,7 +20,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) testImplementation 'junit:junit:4.12' - implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'androidx.appcompat:appcompat:1.0.1' } //TODO fix bug apply from: 'https://raw.githubusercontent.com/whilu/AndroidPublishLibrary/master/project/library/bintray_publish.gradle' //https://github.com/google/ExoPlayer/commit/13592dfb53ec99ce1fdb2744e34717dbdec9dea8 diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/ColorFactory.java b/androidtagview/src/main/java/co/lujun/androidtagview/ColorFactory.java index 943813d..f7871b7 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/ColorFactory.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/ColorFactory.java @@ -65,7 +65,8 @@ public static int[] onRandomBuild(){ int bgColor = Color.parseColor("#" + BG_COLOR_ALPHA + COLORS[random]); int bdColor = Color.parseColor("#" + BD_COLOR_ALPHA + COLORS[random]); int tColor = SHARP666666; - return new int[]{bgColor, bdColor, tColor}; + int tColor2 = SHARP727272; + return new int[]{bgColor, bdColor, tColor, tColor2}; } public static int[] onPureBuild(PURE_COLOR type){ @@ -73,7 +74,8 @@ public static int[] onPureBuild(PURE_COLOR type){ int bgColor = Color.parseColor("#" + BG_COLOR_ALPHA + color); int bdColor = Color.parseColor("#" + BD_COLOR_ALPHA + color); int tColor = SHARP727272; - return new int[]{bgColor, bdColor, tColor}; + int tColor2 = SHARP666666; + return new int[]{bgColor, bdColor, tColor, tColor2}; } } diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java index b8df9ee..86a4cb8 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagContainerLayout.java @@ -23,8 +23,6 @@ import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Typeface; -import android.support.annotation.DrawableRes; -import android.support.v4.widget.ViewDragHelper; import android.util.AttributeSet; import android.view.Gravity; import android.view.MotionEvent; @@ -36,6 +34,9 @@ import java.util.Collections; import java.util.List; +import androidx.annotation.DrawableRes; +import androidx.customview.widget.ViewDragHelper; + import static co.lujun.androidtagview.Utils.dp2px; import static co.lujun.androidtagview.Utils.sp2px; @@ -145,6 +146,11 @@ public class TagContainerLayout extends ViewGroup { */ private int mTagBackgroundColor = Color.parseColor("#33F44336"); + /** + * Selected TagView background color(default #33FF7669) + */ + private int mSelectedTagBackgroundColor = Color.parseColor("#33FF7669"); + /** * TagView text color(default #FF666666) */ @@ -509,7 +515,7 @@ private int[] onUpdateColorFactory() { } else if (mTheme == ColorFactory.PURE_CYAN) { colors = ColorFactory.onPureBuild(ColorFactory.PURE_COLOR.CYAN); } else { - colors = new int[]{mTagBackgroundColor, mTagBorderColor, mTagTextColor}; + colors = new int[]{mTagBackgroundColor, mTagBorderColor, mTagTextColor, mSelectedTagBackgroundColor}; } return colors; } diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java index dd5d3b0..48fe5ab 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java @@ -26,11 +26,12 @@ import android.graphics.Region; import android.graphics.Typeface; import android.os.Build; -import android.support.v4.widget.ViewDragHelper; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; +import androidx.customview.widget.ViewDragHelper; + import static co.lujun.androidtagview.Utils.dp2px; /** diff --git a/build.gradle b/build.gradle index cd5647f..80194e1 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.3' + classpath 'com.android.tools.build:gradle:3.2.1' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0' diff --git a/gradle.properties b/gradle.properties index 629cc7b..a565221 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,3 +13,5 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true #Sun Jan 24 18:50:31 CST 2016 +android.useAndroidX=true +android.enableJetifier=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 52aba3d..1be1c62 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.9-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 4347fad..10c364b 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,13 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 27 - buildToolsVersion "27.0.3" + compileSdkVersion 28 defaultConfig { applicationId "co.lujun.sample" minSdkVersion 21 - targetSdkVersion 27 + targetSdkVersion 28 versionCode 1 versionName "1.0" } @@ -23,6 +22,6 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation project(':androidtagview') testImplementation 'junit:junit:4.12' - implementation 'com.android.support:appcompat-v7:27.1.1' - implementation 'com.android.support:design:27.1.1' + implementation 'androidx.appcompat:appcompat:1.0.1' + implementation 'com.google.android.material:material:1.0.0' } diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index 5efb065..8008611 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -6,9 +6,6 @@ import android.content.DialogInterface; import android.graphics.Color; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -19,6 +16,9 @@ import java.util.ArrayList; import java.util.List; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.recyclerview.widget.RecyclerView; import co.lujun.androidtagview.TagContainerLayout; import co.lujun.androidtagview.TagView; @@ -182,8 +182,8 @@ public void onTagCrossClick(int position) { List colors = new ArrayList(); //int[]color = {backgroundColor, tagBorderColor, tagTextColor} - int[] col1 = {Color.parseColor("#ff0000"), Color.parseColor("#000000"), Color.parseColor("#ffffff")}; - int[] col2 = {Color.parseColor("#0000ff"), Color.parseColor("#000000"), Color.parseColor("#ffffff")}; + int[] col1 = {Color.parseColor("#ff0000"), Color.parseColor("#000000"), Color.parseColor("#ffffff"), Color.parseColor("#999999")}; + int[] col2 = {Color.parseColor("#0000ff"), Color.parseColor("#000000"), Color.parseColor("#ffffff"), Color.parseColor("#999999")}; colors.add(col1); colors.add(col2); diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index a440a0b..12311a8 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -1,5 +1,5 @@ - - - - + - + diff --git a/sample/src/main/res/layout/content_main.xml b/sample/src/main/res/layout/content_main.xml index 24d98fd..bb89e68 100644 --- a/sample/src/main/res/layout/content_main.xml +++ b/sample/src/main/res/layout/content_main.xml @@ -13,12 +13,11 @@ tools:context="co.lujun.sample.MainActivity" tools:showIn="@layout/activity_main"> - + android:visibility="gone" /> Date: Mon, 12 Nov 2018 15:52:48 +0700 Subject: [PATCH 24/31] [F] bug on android P only INTERSECT and DIFFERENCE are allowed https://github.com/whilu/AndroidTagView/issues/88 --- .../src/main/java/co/lujun/androidtagview/TagView.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java index 48fe5ab..b09102f 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/TagView.java @@ -385,7 +385,13 @@ private void drawRipple(Canvas canvas){ canvas.clipPath(mPath); mPath.addRoundRect(mRectF, mBorderRadius, mBorderRadius, Path.Direction.CCW); - canvas.clipPath(mPath, Region.Op.REPLACE); +// bug: https://github.com/whilu/AndroidTagView/issues/88 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + canvas.clipPath(mPath); + } else { + canvas.clipPath(mPath, Region.Op.REPLACE); + } + canvas.drawCircle(mTouchX, mTouchY, mRippleRadius, mRipplePaint); canvas.restore(); }catch (UnsupportedOperationException e){ From 5500007c8d2f0946a1a395eff6f2b093f9a4c57f Mon Sep 17 00:00:00 2001 From: whilu Date: Wed, 28 Nov 2018 21:50:13 +0800 Subject: [PATCH 25/31] New: v1.1.5 --- README.md | 5 ++++- androidtagview/build.gradle | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1c2a557..bd1e26e 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Add below dependency in your **build.gradle** file. ```groovy dependencies { - compile 'co.lujun:androidtagview:1.1.4' + compile 'co.lujun:androidtagview:1.1.5' } ``` @@ -209,6 +209,9 @@ mTagcontainerLayout.setTags(tags, colors); ## Change logs +### 1.1.5(2018-8-20) +- Allow images on tags (in LTR languages). + ### 1.1.4(2017-6-1) - Add attribute for TagView background. diff --git a/androidtagview/build.gradle b/androidtagview/build.gradle index 62e5883..343a70d 100644 --- a/androidtagview/build.gradle +++ b/androidtagview/build.gradle @@ -7,8 +7,8 @@ android { defaultConfig { minSdkVersion 9 targetSdkVersion 25 - versionCode 114 - versionName "1.1.4" + versionCode 115 + versionName "1.1.5" } buildTypes { release { From 49863ad5e93a7522a8071493fc5f61e3a42fed88 Mon Sep 17 00:00:00 2001 From: whilu Date: Thu, 29 Nov 2018 22:00:43 +0800 Subject: [PATCH 26/31] Update: gradle-bintray-plugin to version 1.4 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index dfdaff1..49aef8e 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0' + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From c188c32c74fd86528d498f53bc4cedfb3e1e8d04 Mon Sep 17 00:00:00 2001 From: whilu Date: Sat, 1 Dec 2018 21:43:37 +0800 Subject: [PATCH 27/31] Release: v1.1.6 --- README.md | 13 +++++++++++-- androidtagview/build.gradle | 8 +++----- .../main/java/co/lujun/androidtagview/Utils.java | 4 ++-- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index bd1e26e..a7c9a39 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Add below dependency in your **build.gradle** file. ```groovy dependencies { - compile 'co.lujun:androidtagview:1.1.5' + compile 'co.lujun:androidtagview:1.1.6' } ``` @@ -72,7 +72,8 @@ Now, you have successfully created some TagViews. The following will show some m | tag_border_color | color | TagView border color(default #88F44336) | tag_background_color | color | TagView background color(default #33F44336) | tag_max_length | integer | The max length for TagView(default max length 23) -| tag_clickable | boolean | Whether TagView can clickable(default unclickable) +| tag_clickable | boolean | Whether TagView can clickable(default false) +| tag_selectable | boolean | Whether TagView can be selectable(default false) | tag_theme | enum | The TagView [theme](#themes) | tag_text_direction | enum | The TagView text [direction](#directions) | tag_ripple_color | color | The ripple effect color(default #EEEEEE) @@ -127,6 +128,11 @@ mTagContainerLayout.setOnTagClickListener(new TagView.OnTagClickListener() { public void onTagLongClick(final int position, String text) { // ... } + + @Override + public void onSelectedTagDrag(int position, String text){ + // ... + } @Override public void onTagCrossClick(int position) { @@ -209,6 +215,9 @@ mTagcontainerLayout.setTags(tags, colors); ## Change logs +### 1.1.6(2018-12-1) +- Support tag selectable + ### 1.1.5(2018-8-20) - Allow images on tags (in LTR languages). diff --git a/androidtagview/build.gradle b/androidtagview/build.gradle index c1af273..3ff997c 100644 --- a/androidtagview/build.gradle +++ b/androidtagview/build.gradle @@ -6,8 +6,8 @@ android { defaultConfig { minSdkVersion 21 targetSdkVersion 28 - versionCode 115 - versionName "1.1.5" + versionCode 116 + versionName "1.1.6" } buildTypes { release { @@ -22,6 +22,4 @@ dependencies { testImplementation 'junit:junit:4.12' implementation 'androidx.appcompat:appcompat:1.0.1' } -//TODO fix bug apply from: 'https://raw.githubusercontent.com/whilu/AndroidPublishLibrary/master/project/library/bintray_publish.gradle' -//https://github.com/google/ExoPlayer/commit/13592dfb53ec99ce1fdb2744e34717dbdec9dea8 -//https://github.com/davideas/FlexibleAdapter/issues/579 \ No newline at end of file +apply from: 'https://raw.githubusercontent.com/whilu/AndroidPublishLibrary/master/project/library/bintray_publish.gradle' \ No newline at end of file diff --git a/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java b/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java index 012b6ab..c2b68de 100644 --- a/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java +++ b/androidtagview/src/main/java/co/lujun/androidtagview/Utils.java @@ -37,10 +37,10 @@ public static float sp2px(Context context, float sp) { } /** - * If the color is Dark -> make it lighter and vice versa + * If the color is Dark, make it lighter and vice versa * * @param color in int, - * @param factor 0.0 < factor < 1.0 + * @param factor The factor greater than 0.0 and smaller than 1.0 * @return int */ public static int manipulateColorBrightness(int color, float factor) { From a903e5fccc63bfa60bffd0d6b2bf1ba1772b0d94 Mon Sep 17 00:00:00 2001 From: whilu Date: Sat, 1 Dec 2018 21:59:59 +0800 Subject: [PATCH 28/31] Update: .travis.yml --- .travis.yml | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/.travis.yml b/.travis.yml index 20bba8e..a3a152b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,26 +1,32 @@ language: android -android: - components: - # Uncomment the lines below if you want to - # use the latest revision of Android SDK Tools - # - platform-tools - # - tools - - # The BuildTools version used by your project - - build-tools-25.0.0 +jdk: oraclejdk8 - # The SDK version used to compile your project - - android-25 +env: + global: + - ANDROID_ABI=armeabi-v7a - # Additional components - - extra-google-google_play_services - - extra-google-m2repository +android: + components: + - tools + - android-22 + - android-28 + - sys-img-armeabi-v7a-android-22 - extra-android-m2repository - - addon-google_apis-google-19 + - extra-android-support + - extra + licenses: + - android-sdk-license-.+ + +before_install: + - mkdir "$ANDROID_HOME/licenses" || true + - echo "d56f5187479451eabf01fb78af6dfcb131a6481e" > "$ANDROID_HOME/licenses/android-sdk-license" - # Specify at least one system image, - # if you need to run emulator(s) during your tests - - sys-img-armeabi-v7a-android-19 - - sys-img-x86-android-17 +before_script: + - chmod +x gradlew + - echo no | android create avd --force -n test -t android-22 --abi $ANDROID_ABI + - emulator -avd test -no-window & + - android-wait-for-emulator + - adb shell input keyevent 82 & -script: ./gradlew assembleDebug \ No newline at end of file +script: + - ./gradlew clean connectedAndroidTest \ No newline at end of file From 4168951ffa65fed11cff40d3ee71285e54c173e9 Mon Sep 17 00:00:00 2001 From: whilu Date: Mon, 21 Jan 2019 21:34:32 +0800 Subject: [PATCH 29/31] Release: v1.1.7 --- README.md | 5 ++++- androidtagview/build.gradle | 6 +++--- sample/build.gradle | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a7c9a39..a45cf78 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Add below dependency in your **build.gradle** file. ```groovy dependencies { - compile 'co.lujun:androidtagview:1.1.6' + compile 'co.lujun:androidtagview:1.1.7' } ``` @@ -215,6 +215,9 @@ mTagcontainerLayout.setTags(tags, colors); ## Change logs +### 1.1.7(2019-01-21) +- Fix bugs + ### 1.1.6(2018-12-1) - Support tag selectable diff --git a/androidtagview/build.gradle b/androidtagview/build.gradle index 3ff997c..a04e40a 100644 --- a/androidtagview/build.gradle +++ b/androidtagview/build.gradle @@ -4,10 +4,10 @@ android { compileSdkVersion 28 defaultConfig { - minSdkVersion 21 + minSdkVersion 14 targetSdkVersion 28 - versionCode 116 - versionName "1.1.6" + versionCode 117 + versionName "1.1.7" } buildTypes { release { diff --git a/sample/build.gradle b/sample/build.gradle index a38b08a..db7ac6a 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -5,7 +5,7 @@ android { defaultConfig { applicationId "co.lujun.sample" - minSdkVersion 21 + minSdkVersion 14 targetSdkVersion 28 versionCode 1 versionName "1.0" From 079dd64c34a7872a87db11d8b5b6625a3ec1249c Mon Sep 17 00:00:00 2001 From: whilu Date: Tue, 12 Mar 2019 00:04:03 +0800 Subject: [PATCH 30/31] Update: README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a45cf78..427ab31 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ Add below dependency in your **build.gradle** file. ```groovy dependencies { - compile 'co.lujun:androidtagview:1.1.7' + implementation 'co.lujun:androidtagview:1.1.7' + implementation 'androidx.appcompat:appcompat:1.0.1' } ``` From 75a3bbadf572a25ad2763f0df9546523dac82027 Mon Sep 17 00:00:00 2001 From: whilu Date: Sat, 16 Mar 2019 23:35:54 +0800 Subject: [PATCH 31/31] Update: README.md --- README.md | 6 +++--- androidtagview/project.properties | 10 ++++++++++ .../src/main/java/co/lujun/sample/MainActivity.java | 12 ++++++------ 3 files changed, 19 insertions(+), 9 deletions(-) create mode 100644 androidtagview/project.properties diff --git a/README.md b/README.md index 427ab31..6acc61b 100644 --- a/README.md +++ b/README.md @@ -206,9 +206,9 @@ mTagContainerLayout.getTagView(int position); * Set color for each TagView. ```java List colors = new ArrayList(); -//int[] color = {TagBackgroundColor, TabBorderColor, TagTextColor} -int[] color1 = {Color.RED, Color.BLACK, Color.WHITE}; -int[] color2 = {Color.BLUE, Color.BLACK, Color.WHITE}; +//int[] color = {TagBackgroundColor, TabBorderColor, TagTextColor, TagSelectedBackgroundColor} +int[] color1 = {Color.RED, Color.BLACK, Color.WHITE, Color.YELLOW}; +int[] color2 = {Color.BLUE, Color.BLACK, Color.WHITE, Color.YELLOW}; colors.add(color1); colors.add(color2); mTagcontainerLayout.setTags(tags, colors); diff --git a/androidtagview/project.properties b/androidtagview/project.properties new file mode 100644 index 0000000..1a8d96f --- /dev/null +++ b/androidtagview/project.properties @@ -0,0 +1,10 @@ +#project +project.name=AndroidTagView +project.groupId=co.lujun +project.artifactId=androidtagview +project.packaging=aar +project.siteUrl=https://github.com/whilu/AndroidTagView +project.gitUrl=https://github.com/whilu/AndroidTagView.git + +#javadoc +javadoc.name=AndroidTagView \ No newline at end of file diff --git a/sample/src/main/java/co/lujun/sample/MainActivity.java b/sample/src/main/java/co/lujun/sample/MainActivity.java index 7d85640..9399ad4 100644 --- a/sample/src/main/java/co/lujun/sample/MainActivity.java +++ b/sample/src/main/java/co/lujun/sample/MainActivity.java @@ -14,6 +14,11 @@ import android.widget.EditText; import android.widget.Toast; +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.bumptech.glide.request.target.SimpleTarget; +import com.bumptech.glide.request.transition.Transition; + import java.util.ArrayList; import java.util.List; @@ -23,11 +28,6 @@ import co.lujun.androidtagview.TagContainerLayout; import co.lujun.androidtagview.TagView; -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.bumptech.glide.request.transition.Transition; -import com.bumptech.glide.request.target.SimpleTarget; - public class MainActivity extends AppCompatActivity { private TagContainerLayout mTagContainerLayout1, mTagContainerLayout2, @@ -189,7 +189,7 @@ public void onTagCrossClick(int position) { mTagContainerLayout4.setTags(list4); List colors = new ArrayList(); - //int[]color = {backgroundColor, tagBorderColor, tagTextColor} + //int[]color = {backgroundColor, tagBorderColor, tagTextColor, tagSelectedBackgroundColor} int[] col1 = {Color.parseColor("#ff0000"), Color.parseColor("#000000"), Color.parseColor("#ffffff"), Color.parseColor("#999999")}; int[] col2 = {Color.parseColor("#0000ff"), Color.parseColor("#000000"), Color.parseColor("#ffffff"), Color.parseColor("#999999")};