diff --git a/app/src/main/java/com/hippo/drawable/RoundSideRectDrawable.java b/app/src/main/java/com/hippo/drawable/RoundSideRectDrawable.java new file mode 100644 index 000000000..54a515ac5 --- /dev/null +++ b/app/src/main/java/com/hippo/drawable/RoundSideRectDrawable.java @@ -0,0 +1,84 @@ +/* + * Copyright 2016 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.drawable; + +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; + +public class RoundSideRectDrawable extends Drawable { + + private final Paint mPaint; + private final Path mPath; + private final RectF mTempRectF; + + public RoundSideRectDrawable(int color) { + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); + mPaint.setColor(color); + mPath = new Path(); + mTempRectF = new RectF(); + } + + @Override + protected void onBoundsChange(Rect bounds) { + int width = bounds.width(); + int height = bounds.height(); + RectF rectF = mTempRectF; + Path path = mPath; + + path.reset(); + if (width > height) { + int radius = height / 2; + path.moveTo(bounds.right - radius, bounds.top); + rectF.set(bounds.right - height, bounds.top, bounds.right, bounds.bottom); + path.arcTo(rectF, -90.0f, 180.0f, false); + path.lineTo(bounds.left + radius, bounds.bottom); + rectF.set(bounds.left, bounds.top, bounds.left + height, bounds.bottom); + path.arcTo(rectF, 90.0f, 180.0f, false); + path.lineTo(bounds.right - radius, bounds.top); + } else if (width == height) { + path.addCircle(bounds.centerX(), bounds.centerY(), width / 2, Path.Direction.CW); + } else { + // TODO + } + } + + @Override + public void draw(Canvas canvas) { + canvas.drawPath(mPath, mPaint); + } + + @Override + public void setAlpha(int alpha) { + mPaint.setAlpha(alpha); + } + + @Override + public void setColorFilter(ColorFilter colorFilter) { + mPaint.setColorFilter(colorFilter); + } + + @Override + public int getOpacity() { + return PixelFormat.OPAQUE; + } +} diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index 00316aa19..d45b05ac0 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -45,6 +45,7 @@ import android.widget.RatingBar; import android.widget.TextView; import android.widget.Toast; +import com.hippo.drawable.RoundSideRectDrawable; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.UrlOpener; @@ -684,7 +685,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene TextView tgName = (TextView) inflater.inflate(R.layout.item_gallery_tag, ll, false); ll.addView(tgName); tgName.setText(tg.groupName); - tgName.setBackgroundColor(colorName); + tgName.setBackgroundDrawable(new RoundSideRectDrawable(colorName)); AutoWrapLayout awl = new AutoWrapLayout(getContext()); ll.addView(awl, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); @@ -693,7 +694,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene awl.addView(tag); String tagStr = tg.getTagAt(j); tag.setText(tagStr); - tag.setBackgroundColor(colorTag); + tag.setBackgroundDrawable(new RoundSideRectDrawable(colorTag)); tag.setTag(R.id.tag, tagStr); tag.setOnClickListener(this); } diff --git a/app/src/main/res/layout/item_gallery_tag.xml b/app/src/main/res/layout/item_gallery_tag.xml index f85ce7556..dda62e779 100644 --- a/app/src/main/res/layout/item_gallery_tag.xml +++ b/app/src/main/res/layout/item_gallery_tag.xml @@ -21,8 +21,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="4dp" - android:paddingBottom="4dp" - android:paddingLeft="8dp" - android:paddingRight="8dp" + android:paddingLeft="12dp" + android:paddingRight="12dp" android:paddingTop="4dp" + android:paddingBottom="4dp" android:textColor="@android:color/white"/>