From 27aa1ff66252f6e36da39a8284fa4c819952158c Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 6 Mar 2020 13:43:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/widget/ArcView.java | 93 ------------------- .../java/io/legado/app/ui/widget/ArcView.kt | 82 ++++++++++++++++ .../ui/widget/{ => text}/ScrollTextView.kt | 2 +- .../main/res/layout/activity_book_info.xml | 2 +- 4 files changed, 84 insertions(+), 95 deletions(-) delete mode 100644 app/src/main/java/io/legado/app/ui/widget/ArcView.java create mode 100644 app/src/main/java/io/legado/app/ui/widget/ArcView.kt rename app/src/main/java/io/legado/app/ui/widget/{ => text}/ScrollTextView.kt (98%) diff --git a/app/src/main/java/io/legado/app/ui/widget/ArcView.java b/app/src/main/java/io/legado/app/ui/widget/ArcView.java deleted file mode 100644 index 8e6e849ae..000000000 --- a/app/src/main/java/io/legado/app/ui/widget/ArcView.java +++ /dev/null @@ -1,93 +0,0 @@ -package io.legado.app.ui.widget; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.Rect; -import android.util.AttributeSet; -import android.view.View; -import io.legado.app.R; -import androidx.annotation.Nullable; - -public class ArcView extends View { - private int mWidth; - private int mHeight; - /** - * 弧形高度 - */ - private int mArcHeight; - /** - * 背景颜色 - */ - private int mBgColor; - private Paint mPaint; - private boolean mDirectionTop; - private Context mContext; - - public ArcView(Context context) { - this(context, null); - } - - public ArcView(Context context, @Nullable AttributeSet attrs) { - this(context, attrs, 0); - } - - public ArcView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - - TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ArcView); - mArcHeight = typedArray.getDimensionPixelSize(R.styleable.ArcView_arcHeight, 0); - mBgColor = typedArray.getColor(R.styleable.ArcView_bgColor, Color.parseColor("#303F9F")); - mDirectionTop = typedArray.getBoolean(R.styleable.ArcView_arcDirectionTop, false); - mContext = context; - mPaint = new Paint(); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - mPaint.setStyle(Paint.Style.FILL); - mPaint.setColor(mBgColor); - - if (mDirectionTop) { - Rect rect = new Rect(0, mArcHeight, mWidth, mHeight); - canvas.drawRect(rect, mPaint); - - - Path path = new Path(); - path.moveTo(0, mArcHeight); - path.quadTo(mWidth / 2, 0, mWidth, mArcHeight); - canvas.drawPath(path, mPaint); - } else { - Rect rect = new Rect(0, 0, mWidth, mHeight - mArcHeight); - canvas.drawRect(rect, mPaint); - - - Path path = new Path(); - path.moveTo(0, mHeight - mArcHeight); - path.quadTo(mWidth / 2, mHeight, mWidth, mHeight - mArcHeight); - canvas.drawPath(path, mPaint); - } - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - int widthSize = MeasureSpec.getSize(widthMeasureSpec); - int widthMode = MeasureSpec.getMode(widthMeasureSpec); - int heightSize = MeasureSpec.getSize(heightMeasureSpec); - int heightMode = MeasureSpec.getMode(heightMeasureSpec); - - if (widthMode == MeasureSpec.EXACTLY) { - mWidth = widthSize; - } - if (heightMode == MeasureSpec.EXACTLY) { - mHeight = heightSize; - } - setMeasuredDimension(mWidth, mHeight); - } -} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/widget/ArcView.kt b/app/src/main/java/io/legado/app/ui/widget/ArcView.kt new file mode 100644 index 000000000..a6e8eaa1f --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/widget/ArcView.kt @@ -0,0 +1,82 @@ +package io.legado.app.ui.widget + +import android.content.Context +import android.graphics.* +import android.util.AttributeSet +import android.view.View +import io.legado.app.R + +class ArcView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : View(context, attrs, defStyleAttr) { + private var mWidth = 0 + private var mHeight = 0 + + /** + * 弧形高度 + */ + private val mArcHeight: Int + + /** + * 背景颜色 + */ + private val mBgColor: Int + private val mPaint: Paint = Paint() + private val mDirectionTop: Boolean + val rect = Rect() + val path = Path() + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + mPaint.style = Paint.Style.FILL + mPaint.color = mBgColor + if (mDirectionTop) { + rect.set(0, mArcHeight, mWidth, mHeight) + canvas.drawRect(rect, mPaint) + path.reset() + path.moveTo(0f, mArcHeight.toFloat()) + path.quadTo(mWidth / 2.toFloat(), 0f, mWidth.toFloat(), mArcHeight.toFloat()) + canvas.drawPath(path, mPaint) + } else { + rect.set(0, 0, mWidth, mHeight - mArcHeight) + canvas.drawRect(rect, mPaint) + path.reset() + path.moveTo(0f, mHeight - mArcHeight.toFloat()) + path.quadTo( + mWidth / 2.toFloat(), + mHeight.toFloat(), + mWidth.toFloat(), + mHeight - mArcHeight.toFloat() + ) + canvas.drawPath(path, mPaint) + } + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + val widthSize = MeasureSpec.getSize(widthMeasureSpec) + val widthMode = MeasureSpec.getMode(widthMeasureSpec) + val heightSize = MeasureSpec.getSize(heightMeasureSpec) + val heightMode = MeasureSpec.getMode(heightMeasureSpec) + if (widthMode == MeasureSpec.EXACTLY) { + mWidth = widthSize + } + if (heightMode == MeasureSpec.EXACTLY) { + mHeight = heightSize + } + setMeasuredDimension(mWidth, mHeight) + } + + init { + val typedArray = context.obtainStyledAttributes(attrs, R.styleable.ArcView) + mArcHeight = typedArray.getDimensionPixelSize(R.styleable.ArcView_arcHeight, 0) + mBgColor = typedArray.getColor( + R.styleable.ArcView_bgColor, + Color.parseColor("#303F9F") + ) + mDirectionTop = typedArray.getBoolean(R.styleable.ArcView_arcDirectionTop, false) + typedArray.recycle() + } +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/widget/ScrollTextView.kt b/app/src/main/java/io/legado/app/ui/widget/text/ScrollTextView.kt similarity index 98% rename from app/src/main/java/io/legado/app/ui/widget/ScrollTextView.kt rename to app/src/main/java/io/legado/app/ui/widget/text/ScrollTextView.kt index 29f1a9fb8..d0b579cd4 100644 --- a/app/src/main/java/io/legado/app/ui/widget/ScrollTextView.kt +++ b/app/src/main/java/io/legado/app/ui/widget/text/ScrollTextView.kt @@ -1,4 +1,4 @@ -package io.legado.app.ui.widget +package io.legado.app.ui.widget.text import android.annotation.SuppressLint import android.content.Context diff --git a/app/src/main/res/layout/activity_book_info.xml b/app/src/main/res/layout/activity_book_info.xml index 96ea949e6..8e58e34cb 100644 --- a/app/src/main/res/layout/activity_book_info.xml +++ b/app/src/main/res/layout/activity_book_info.xml @@ -243,7 +243,7 @@ -