parent
e903c01b4e
commit
27aa1ff662
@ -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); |
|
||||||
} |
|
||||||
} |
|
@ -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() |
||||||
|
} |
||||||
|
} |
@ -1,4 +1,4 @@ |
|||||||
package io.legado.app.ui.widget |
package io.legado.app.ui.widget.text |
||||||
|
|
||||||
import android.annotation.SuppressLint |
import android.annotation.SuppressLint |
||||||
import android.content.Context |
import android.content.Context |
Loading…
Reference in new issue