From d38704e47be161b20f44418bd702707df9f1c7a1 Mon Sep 17 00:00:00 2001 From: Lindroy Date: Mon, 10 Dec 2018 16:23:36 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=B8=BAIndexBar=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=92=8C=E6=8C=89=E4=B8=8B=E6=97=B6=E7=9A=84?= =?UTF-8?q?=E8=83=8C=E6=99=AF=E8=89=B2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/qdx/indexbarlayout/IndexBar.java | 46 ++++++++++++++++++- .../java/qdx/indexbarlayout/IndexLayout.java | 5 +- .../java/qdx/indexbarlayout/MainActivity.java | 9 ++-- 3 files changed, 52 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/qdx/indexbarlayout/IndexBar.java b/app/src/main/java/qdx/indexbarlayout/IndexBar.java index 5625a08..12a0de1 100644 --- a/app/src/main/java/qdx/indexbarlayout/IndexBar.java +++ b/app/src/main/java/qdx/indexbarlayout/IndexBar.java @@ -4,7 +4,10 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; +import android.graphics.RectF; +import android.support.annotation.ColorInt; import android.support.annotation.Nullable; +import android.support.v4.content.ContextCompat; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; @@ -13,7 +16,8 @@ public class IndexBar extends View { - private Paint mPaint; + private final String TAG = "qdx"; + private Paint mPaint, mBarBgPaint; private int textSpan;//每个index占据空间 private IndexChangeListener listener; private List indexsList; @@ -22,6 +26,13 @@ public class IndexBar extends View { private int norTextColor = Color.GRAY; private float yAxis;//文字y轴方向的基线 + private RectF mIndexBarBg; + //默认的背景色 + private int norBarBgColor = ContextCompat.getColor(getContext(), android.R.color.transparent); + //按下时的背景色,默认为透明 + private int selBarBgColor = ContextCompat.getColor(getContext(), android.R.color.transparent); + private int mIndexBarBgRadius = 0; + public IndexBar(Context context) { this(context, null); } @@ -36,6 +47,11 @@ public IndexBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) } private void init() { + //设置背景属性 + mBarBgPaint = new Paint(); + mBarBgPaint.setColor(norBarBgColor); + mBarBgPaint.setAntiAlias(true); + //设置文字属性 mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(norTextColor); mPaint.setTextSize(textSize); @@ -52,6 +68,13 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) { if (indexsList != null && indexsList.size() > 0) { textSpan = h / (indexsList.size() + 1); } + //背景大小 + mIndexBarBg = new RectF( + 0, + 0, + w, + h + ); } @Override @@ -61,6 +84,8 @@ protected void onDraw(Canvas canvas) { canvas.drawText(indexsList.get(i), getWidth() / 2, textSpan * (i + 1) + yAxis, mPaint); } } + //绘制背景 + canvas.drawRoundRect(mIndexBarBg, mIndexBarBgRadius, mIndexBarBgRadius, mBarBgPaint); } @@ -74,12 +99,12 @@ public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mPaint.setColor(selTextColor); + mBarBgPaint.setColor(selBarBgColor); invalidate(); case MotionEvent.ACTION_MOVE: if (event.getY() < textSpan / 2 || (event.getY() - textSpan / 2) > textSpan * indexsList.size()) { return true; } - int position = (int) ((event.getY() - textSpan / 2) / textSpan * 1.0f); if (position >= 0 && position < indexsList.size()) { ((IndexLayout) getParent()).drawCircle(event.getY(), indexsList.get(position)); @@ -92,6 +117,7 @@ public boolean onTouchEvent(MotionEvent event) { case MotionEvent.ACTION_UP: ((IndexLayout) getParent()).dismissCircle(); mPaint.setColor(norTextColor); + mBarBgPaint.setColor(norBarBgColor); invalidate(); break; } @@ -125,4 +151,20 @@ public void setNorTextColor(int norTextColor) { this.norTextColor = norTextColor; mPaint.setColor(norTextColor); } + + public int getNorBarBgColor() { + return norBarBgColor; + } + + public void setNorBarBgColor(@ColorInt int norBarBgColor) { + this.norBarBgColor = norBarBgColor; + } + + public int getSelBarBgColor() { + return selBarBgColor; + } + + public void setSelBarBgColor(@ColorInt int selBarBgColor) { + this.selBarBgColor = selBarBgColor; + } } diff --git a/app/src/main/java/qdx/indexbarlayout/IndexLayout.java b/app/src/main/java/qdx/indexbarlayout/IndexLayout.java index 4b6411f..f59fa09 100644 --- a/app/src/main/java/qdx/indexbarlayout/IndexLayout.java +++ b/app/src/main/java/qdx/indexbarlayout/IndexLayout.java @@ -6,6 +6,7 @@ import android.graphics.Paint; import android.os.Handler; import android.os.Message; +import android.support.annotation.FloatRange; import android.util.AttributeSet; import android.util.Log; import android.view.View; @@ -33,7 +34,7 @@ public class IndexLayout extends FrameLayout { private boolean isShowCircle; private String indexName = ""; private IndexBar indexBar; - private int indexBarWidth = dp2px(30); + private int indexBarWidth = dp2px(50); private float indexBarHeightRatio = 1; public IndexLayout(Context context) { @@ -227,7 +228,7 @@ public void setDrawByTouch(boolean drawByTouch) { /** * indexBar 高度占父容器的比率,默认1 */ - public void setIndexBarHeightRatio(float indexBarHeightRatio) { + public void setIndexBarHeightRatio(@FloatRange(from = 0.0f,to = 1.0f) float indexBarHeightRatio) { this.indexBarHeightRatio = indexBarHeightRatio; } diff --git a/app/src/main/java/qdx/indexbarlayout/MainActivity.java b/app/src/main/java/qdx/indexbarlayout/MainActivity.java index 2b79048..f9b329e 100644 --- a/app/src/main/java/qdx/indexbarlayout/MainActivity.java +++ b/app/src/main/java/qdx/indexbarlayout/MainActivity.java @@ -64,12 +64,13 @@ public void headerClick(int pos) { heads.add(car.getInitial()); } } - indexLayout.setIndexBarHeightRatio(0.9f); + indexLayout.setIndexBarHeightRatio(0.7f); indexLayout.getIndexBar().setIndexsList(heads); - indexLayout.setCircleTextColor(Color.RED); - indexLayout.setCircleRadius(200); - indexLayout.setCirCleTextSize(150); + indexLayout.setCircleTextColor(Color.WHITE); + indexLayout.setCircleRadius(120); + indexLayout.setCirCleTextSize(80); indexLayout.setCircleColor(ContextCompat.getColor(this, R.color.circle_bg)); + indexLayout.getIndexBar().setSelBarBgColor(Color.parseColor("#45000000")); indexLayout.getIndexBar().setIndexChangeListener(new IndexBar.IndexChangeListener() { @Override public void indexChanged(String indexName) { From 4fda5835c288f28356a6dcb4f942c648c03636ac Mon Sep 17 00:00:00 2001 From: Lindroy Date: Mon, 10 Dec 2018 17:40:17 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=B8=BA=E9=A2=9C=E8=89=B2=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E6=B7=BB=E5=8A=A0=E6=B3=A8=E8=A7=A3=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9F=90=E4=BA=9B=E9=94=99=E8=AF=AF=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/qdx/indexbarlayout/IndexBar.java | 10 ++++++---- app/src/main/java/qdx/indexbarlayout/IndexLayout.java | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/qdx/indexbarlayout/IndexBar.java b/app/src/main/java/qdx/indexbarlayout/IndexBar.java index 12a0de1..013d935 100644 --- a/app/src/main/java/qdx/indexbarlayout/IndexBar.java +++ b/app/src/main/java/qdx/indexbarlayout/IndexBar.java @@ -79,13 +79,15 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) { @Override protected void onDraw(Canvas canvas) { + //先绘制背景 + canvas.drawRoundRect(mIndexBarBg, mIndexBarBgRadius, mIndexBarBgRadius, mBarBgPaint); + //再绘制文字 if (indexsList != null && indexsList.size() > 0) { for (int i = 0; i < indexsList.size(); i++) { canvas.drawText(indexsList.get(i), getWidth() / 2, textSpan * (i + 1) + yAxis, mPaint); } } - //绘制背景 - canvas.drawRoundRect(mIndexBarBg, mIndexBarBgRadius, mIndexBarBgRadius, mBarBgPaint); + } @@ -143,11 +145,11 @@ public void setIndexTextSize(int textSize) { mPaint.setTextSize(textSize); } - public void setSelTextColor(int selTextColor) { + public void setSelTextColor(@ColorInt int selTextColor) { this.selTextColor = selTextColor; } - public void setNorTextColor(int norTextColor) { + public void setNorTextColor(@ColorInt int norTextColor) { this.norTextColor = norTextColor; mPaint.setColor(norTextColor); } diff --git a/app/src/main/java/qdx/indexbarlayout/IndexLayout.java b/app/src/main/java/qdx/indexbarlayout/IndexLayout.java index f59fa09..22bacd3 100644 --- a/app/src/main/java/qdx/indexbarlayout/IndexLayout.java +++ b/app/src/main/java/qdx/indexbarlayout/IndexLayout.java @@ -34,7 +34,7 @@ public class IndexLayout extends FrameLayout { private boolean isShowCircle; private String indexName = ""; private IndexBar indexBar; - private int indexBarWidth = dp2px(50); + private int indexBarWidth = dp2px(30); private float indexBarHeightRatio = 1; public IndexLayout(Context context) { From dd6853a7492d8b30d0d46f999182c9cc42a1a210 Mon Sep 17 00:00:00 2001 From: Lindroy Date: Mon, 10 Dec 2018 17:57:17 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E8=83=8C=E6=99=AF=E8=89=B2=E6=97=A0=E6=95=88?= =?UTF-8?q?=E7=9A=84=E9=94=99=E8=AF=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/qdx/indexbarlayout/IndexBar.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/qdx/indexbarlayout/IndexBar.java b/app/src/main/java/qdx/indexbarlayout/IndexBar.java index 013d935..c96fd06 100644 --- a/app/src/main/java/qdx/indexbarlayout/IndexBar.java +++ b/app/src/main/java/qdx/indexbarlayout/IndexBar.java @@ -160,6 +160,7 @@ public int getNorBarBgColor() { public void setNorBarBgColor(@ColorInt int norBarBgColor) { this.norBarBgColor = norBarBgColor; + mBarBgPaint.setColor(norBarBgColor); } public int getSelBarBgColor() { @@ -168,5 +169,6 @@ public int getSelBarBgColor() { public void setSelBarBgColor(@ColorInt int selBarBgColor) { this.selBarBgColor = selBarBgColor; + } }