set highlight mode, and check the params

pull/190/head
xufuji456 3 years ago
parent 05872ae26d
commit 1562eef254
  1. 1
      app/src/main/java/com/frank/ffmpeg/activity/AudioPlayActivity.kt
  2. 24
      app/src/main/java/com/frank/ffmpeg/view/LrcView.kt

@ -59,6 +59,7 @@ class AudioPlayActivity : AppCompatActivity() {
audioBar?.max = duration audioBar?.max = duration
} }
MSG_FINISH -> { MSG_FINISH -> {
if (msg.obj == null) return
val result = msg.obj as MediaBean val result = msg.obj as MediaBean
txtTitle?.text = result.audioBean?.title txtTitle?.text = result.audioBean?.title
txtArtist?.text = result.audioBean?.artist txtArtist?.text = result.audioBean?.artist

@ -9,6 +9,7 @@ import android.graphics.Paint.Align
import android.util.AttributeSet import android.util.AttributeSet
import android.view.MotionEvent import android.view.MotionEvent
import android.view.View import android.view.View
import androidx.annotation.IntDef
import com.frank.ffmpeg.listener.OnLrcListener import com.frank.ffmpeg.listener.OnLrcListener
import com.frank.ffmpeg.model.LrcLine import com.frank.ffmpeg.model.LrcLine
@ -42,7 +43,12 @@ class LrcView(context: Context, attr: AttributeSet) : View(context, attr) {
private var mDisplayMode = DISPLAY_MODE_NORMAL private var mDisplayMode = DISPLAY_MODE_NORMAL
private val mode = MODE_HIGH_LIGHT_KARAOKE @Retention(AnnotationRetention.SOURCE)
@IntDef(MODE_HIGH_LIGHT_NORMAL, MODE_HIGH_LIGHT_KARAOKE)
annotation class HighLightMode
@HighLightMode
private var mode = MODE_HIGH_LIGHT_KARAOKE
init { init {
@ -109,20 +115,24 @@ class LrcView(context: Context, attr: AttributeSet) : View(context, attr) {
} }
private fun drawKaraokeHighLightLrcRow(canvas: Canvas, width: Int, rowX: Int, highlightRowY: Int) { private fun drawKaraokeHighLightLrcRow(canvas: Canvas, width: Int, rowX: Int, highlightRowY: Int) {
if (width <= 0 || rowX <= 0 || highlightRowY <= 0) {
return
}
val highLrcLine = mLrcLines!![mHighLightRow] val highLrcLine = mLrcLines!![mHighLightRow]
val highlightText = highLrcLine.content val highlightText = highLrcLine.content
if (highlightText.isNullOrEmpty()) return
mPaint.color = mNormalRowColor mPaint.color = mNormalRowColor
mPaint.textSize = mLrcFontSize.toFloat() mPaint.textSize = mLrcFontSize.toFloat()
mPaint.textAlign = Align.CENTER mPaint.textAlign = Align.CENTER
canvas.drawText(highlightText!!, rowX.toFloat(), highlightRowY.toFloat(), mPaint) canvas.drawText(highlightText, rowX.toFloat(), highlightRowY.toFloat(), mPaint)
val highLineWidth = mPaint.measureText(highlightText).toInt() val highLineWidth = mPaint.measureText(highlightText).toInt()
val leftOffset = (width - highLineWidth) / 2 val leftOffset = (width - highLineWidth) / 2
val start = highLrcLine.startTime val start = highLrcLine.startTime
val end = highLrcLine.endTime val end = highLrcLine.endTime
val highWidth = ((currentMillis - start) * 1.0f / (end - start) * highLineWidth).toInt() val highWidth = ((currentMillis - start) * 1.0f / (end - start) * highLineWidth).toInt()
if (highWidth > 0) { if (highWidth > 0 && highWidth < Integer.MAX_VALUE) {
mPaint.color = mHighLightRowColor mPaint.color = mHighLightRowColor
val textBitmap = Bitmap.createBitmap(highWidth, highlightRowY + mPadding, Bitmap.Config.ARGB_8888) val textBitmap = Bitmap.createBitmap(highWidth, highlightRowY + mPadding, Bitmap.Config.ARGB_8888)
val textCanvas = Canvas(textBitmap) val textCanvas = Canvas(textBitmap)
@ -196,6 +206,10 @@ class LrcView(context: Context, attr: AttributeSet) : View(context, attr) {
invalidate() invalidate()
} }
fun setHighLightMode(@HighLightMode mode: Int) {
this.mode = mode
}
private fun seekLrc(position: Int, cb: Boolean) { private fun seekLrc(position: Int, cb: Boolean) {
if (mLrcLines == null || position < 0 || position > mLrcLines!!.size) { if (mLrcLines == null || position < 0 || position > mLrcLines!!.size) {
return return
@ -251,8 +265,8 @@ class LrcView(context: Context, attr: AttributeSet) : View(context, attr) {
private const val noLrcTip = "No lyrics..." private const val noLrcTip = "No lyrics..."
private const val MODE_HIGH_LIGHT_NORMAL = 0 const val MODE_HIGH_LIGHT_NORMAL = 0
private const val MODE_HIGH_LIGHT_KARAOKE = 1 const val MODE_HIGH_LIGHT_KARAOKE = 1
} }
} }

Loading…
Cancel
Save