Commit 37094dd6 authored by wanglei's avatar wanglei

圆弧是以全圆来绘制的

parent 23714731
......@@ -42,9 +42,12 @@ class ManagerFragment : Fragment() {
val disk = requireContext().getMountInfoList().first()
binding.tvFree.text = disk.getTotalContent(requireContext())
val percent = BigDecimal(disk.used)
.divide(BigDecimal(disk.total), 2, BigDecimal.ROUND_HALF_UP).multiply(BigDecimal(100)).toInt()
val percentF = BigDecimal(disk.used)
.divide(BigDecimal(disk.total), 2, BigDecimal.ROUND_HALF_UP)
// binding.indicatorView.setPercent(percentF.toFloat())
binding.indicatorView.setPercent(0.3f)
val percent = percentF.multiply(BigDecimal(100)).toInt()
binding.tvUse.text = "$percent%"
(requireActivity() as OverviewActivity).showManager()
......
......@@ -5,26 +5,31 @@ import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import android.graphics.Matrix
import android.graphics.Paint
import android.graphics.Rect
import android.graphics.RectF
import android.util.AttributeSet
import android.util.Log
import android.view.View
import androidx.core.content.ContextCompat
import com.example.hfilemanagermaster.R
import com.zxhy.hfilemanagermaster.knife.setImageSize
import java.math.BigDecimal
import java.math.RoundingMode
import kotlin.math.min
class IndicatorView : View {
private lateinit var bgBitmap: Bitmap
private var scale = 1f//背景图像缩放比例
private var strokeWidth = 1f//圆弧线宽
private var radius = 50f//圆弧半径(外圆弧)
private var hMargin = 50f//圆弧水平间距
private var strokeWidth = 40f//圆弧线宽
private var radius = 425f//圆弧半径(外圆弧)
private var hMargin = 75f//圆弧水平间距
private var topMargin = 50f//圆弧顶部距离
private var sweepAngle = 0f
private lateinit var bgBitmap: Bitmap
private var scale = 1f//指针图像缩放比例
private var rotationDegrees = 0f // 旋转的角度
// 画原始刻度的画笔
......@@ -47,21 +52,23 @@ class IndicatorView : View {
}
private fun setResource() {
bgBitmap = BitmapFactory.decodeResource(context.resources, R.mipmap.ee_98985)
bgBitmap = BitmapFactory.decodeResource(context.resources, R.mipmap.dad_58978)
arcPaint.strokeWidth = strokeWidth
arcPaint.color = ContextCompat.getColor(context, R.color.color_DCFE86)
arcPaint.isAntiAlias = true
arcPaint.style = Paint.Style.STROKE
arcPaint.strokeCap = Paint.Cap.ROUND
}
@SuppressLint("DrawAllocation")
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
scale = BigDecimal(measuredWidth).divide(
BigDecimal(bgBitmap.width), 3, RoundingMode.HALF_UP
).toFloat()
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
......@@ -83,25 +90,30 @@ class IndicatorView : View {
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
//绘制背景图片
val srcRect = Rect(0, 0, measuredWidth, measuredHeight)
val dstRect = Rect(0, 0, measuredWidth, measuredHeight)
// canvas.drawBitmap(bgBitmap.setImageSize(scale), srcRect, dstRect, Paint())
Log.e("IndicatorView", "radius=$radius")
val left = hMargin
val top = topMargin
val right = hMargin + radius * 2
val bottom = hMargin + radius * 2
val left = hMargin + strokeWidth / 2
val top = topMargin + strokeWidth / 2
val right = radius * 2 + left
val bottom = radius * 2 + top
Log.e("IndicatorView", "left=$left top=$top right=$right bottom=$bottom")
//绘制半圆
val arcRect = RectF(left, top, right, bottom)
canvas.drawArc(arcRect, -180f, sweepAngle, false, arcPaint)
canvas.translate((measuredWidth / 2).toFloat() + 50, measuredHeight - 250f)
// 绘制旋转后的图片
// val srcRect = Rect(0, 0, 100, 100)
// val dstRect = Rect(0, 0, 100, 100)
//绘制指针
}
// RectF(0f, 0f, 100f,100f)
// val w=measuredWidth.toFloat()
// val h=measuredHeight.toFloat()
// Log.e("arcRect","W=$w h=$h")
canvas.drawArc(arcRect, 0f, -180f, false, arcPaint)
//绘制百分比
fun setPercent(percent: Float) {
sweepAngle = 180f * percent
rotationDegrees = 180f * percent-80f
invalidate()
}
}
\ No newline at end of file
......@@ -63,10 +63,10 @@
app:layout_constraintTop_toBottomOf="@+id/tv_r" />
<com.zxhy.hfilemanagermaster.widget.IndicatorView
android:layout_width="0dp"
android:background="#FF5F4A"
android:layout_marginBottom="-10dp"
android:id="@+id/indicatorView"
android:layout_width="350dp"
android:layout_height="159dp"
android:background="@mipmap/ee_98985"
android:layout_marginHorizontal="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment