mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
Fix CoverImageView image display size issue #4902
Some checks failed
Test Build / prepare (push) Waiting to run
Test Build / build (app, release) (push) Blocked by required conditions
Test Build / build (app, releaseA) (push) Blocked by required conditions
Test Build / prerelease (push) Blocked by required conditions
Test Build / lanzou (push) Blocked by required conditions
Test Build / test_Branch (push) Blocked by required conditions
Test Build / telegram (push) Blocked by required conditions
closeStaleIssue / stale (push) Has been cancelled
Some checks failed
Test Build / prepare (push) Waiting to run
Test Build / build (app, release) (push) Blocked by required conditions
Test Build / build (app, releaseA) (push) Blocked by required conditions
Test Build / prerelease (push) Blocked by required conditions
Test Build / lanzou (push) Blocked by required conditions
Test Build / test_Branch (push) Blocked by required conditions
Test Build / telegram (push) Blocked by required conditions
closeStaleIssue / stale (push) Has been cancelled
This commit is contained in:
@@ -9,6 +9,8 @@ import android.graphics.Typeface
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.text.TextPaint
|
||||
import android.util.AttributeSet
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.widget.AppCompatImageView
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import com.bumptech.glide.load.DataSource
|
||||
@@ -32,13 +34,10 @@ import io.legado.app.utils.toStringArray
|
||||
class CoverImageView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null
|
||||
) : androidx.appcompat.widget.AppCompatImageView(
|
||||
context,
|
||||
attrs
|
||||
) {
|
||||
) : AppCompatImageView(context, attrs) {
|
||||
private var filletPath = Path()
|
||||
private var width: Float = 0.toFloat()
|
||||
private var height: Float = 0.toFloat()
|
||||
private var viewWidth: Float = 0f
|
||||
private var viewHeight: Float = 0f
|
||||
private var defaultCover = true
|
||||
var bitmapPath: String? = null
|
||||
private set
|
||||
@@ -61,6 +60,18 @@ class CoverImageView @JvmOverloads constructor(
|
||||
textPaint
|
||||
}
|
||||
|
||||
override fun setLayoutParams(params: ViewGroup.LayoutParams?) {
|
||||
if (params != null) {
|
||||
val width = params.width
|
||||
if (width >= 0) {
|
||||
params.height = width * 7 / 5
|
||||
} else {
|
||||
params.height = ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
}
|
||||
}
|
||||
super.setLayoutParams(params)
|
||||
}
|
||||
|
||||
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
||||
val measuredWidth = MeasureSpec.getSize(widthMeasureSpec)
|
||||
val measuredHeight = measuredWidth * 7 / 5
|
||||
@@ -72,18 +83,18 @@ class CoverImageView @JvmOverloads constructor(
|
||||
|
||||
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
|
||||
super.onLayout(changed, left, top, right, bottom)
|
||||
width = getWidth().toFloat()
|
||||
height = getHeight().toFloat()
|
||||
viewWidth = width.toFloat()
|
||||
viewHeight = height.toFloat()
|
||||
filletPath.reset()
|
||||
if (width > 10 && height > 10) {
|
||||
if (width > 10 && viewHeight > 10) {
|
||||
filletPath.apply {
|
||||
moveTo(10f, 0f)
|
||||
lineTo(width - 10, 0f)
|
||||
quadTo(width, 0f, width, 10f)
|
||||
lineTo(width, height - 10)
|
||||
quadTo(width, height, width - 10, height)
|
||||
lineTo(10f, height)
|
||||
quadTo(0f, height, 0f, height - 10)
|
||||
lineTo(viewWidth - 10, 0f)
|
||||
quadTo(viewWidth, 0f, viewWidth, 10f)
|
||||
lineTo(viewWidth, viewHeight - 10)
|
||||
quadTo(viewWidth, viewHeight, viewWidth - 10, viewHeight)
|
||||
lineTo(10f, viewHeight)
|
||||
quadTo(0f, viewHeight, 0f, viewHeight - 10)
|
||||
lineTo(0f, 10f)
|
||||
quadTo(0f, 0f, 10f, 0f)
|
||||
close()
|
||||
@@ -104,9 +115,9 @@ class CoverImageView @JvmOverloads constructor(
|
||||
private fun drawNameAuthor(canvas: Canvas) {
|
||||
if (!BookCover.drawBookName) return
|
||||
var startX = width * 0.2f
|
||||
var startY = height * 0.2f
|
||||
var startY = viewHeight * 0.2f
|
||||
name?.toStringArray()?.let { name ->
|
||||
namePaint.textSize = width / 6
|
||||
namePaint.textSize = viewWidth / 6
|
||||
namePaint.strokeWidth = namePaint.textSize / 5
|
||||
name.forEachIndexed { index, char ->
|
||||
namePaint.color = Color.WHITE
|
||||
@@ -116,20 +127,20 @@ class CoverImageView @JvmOverloads constructor(
|
||||
namePaint.style = Paint.Style.FILL
|
||||
canvas.drawText(char, startX, startY, namePaint)
|
||||
startY += namePaint.textHeight
|
||||
if (startY > height * 0.8) {
|
||||
if (startY > viewHeight * 0.8) {
|
||||
startX += namePaint.textSize
|
||||
namePaint.textSize = width / 10
|
||||
startY = (height - (name.size - index - 1) * namePaint.textHeight) / 2
|
||||
namePaint.textSize = viewWidth / 10
|
||||
startY = (viewHeight - (name.size - index - 1) * namePaint.textHeight) / 2
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!BookCover.drawBookAuthor) return
|
||||
author?.toStringArray()?.let { author ->
|
||||
authorPaint.textSize = width / 10
|
||||
authorPaint.textSize = viewWidth / 10
|
||||
authorPaint.strokeWidth = authorPaint.textSize / 5
|
||||
startX = width * 0.8f
|
||||
startY = height * 0.95f - author.size * authorPaint.textHeight
|
||||
startY = maxOf(startY, height * 0.3f)
|
||||
startY = viewHeight * 0.95f - author.size * authorPaint.textHeight
|
||||
startY = maxOf(startY, viewHeight * 0.3f)
|
||||
author.forEach {
|
||||
authorPaint.color = Color.WHITE
|
||||
authorPaint.style = Paint.Style.STROKE
|
||||
@@ -138,7 +149,7 @@ class CoverImageView @JvmOverloads constructor(
|
||||
authorPaint.style = Paint.Style.FILL
|
||||
canvas.drawText(it, startX, startY, authorPaint)
|
||||
startY += authorPaint.textHeight
|
||||
if (startY > height * 0.95) {
|
||||
if (startY > viewHeight * 0.95) {
|
||||
return@let
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user