Added Swipe on Lyrics to change songs
This commit is contained in:
parent
f660c6147a
commit
9d8eb633af
2 changed files with 34 additions and 7 deletions
|
@ -136,13 +136,26 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe
|
||||||
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this, 500, 1000)
|
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this, 500, 1000)
|
||||||
maybeInitLyrics()
|
maybeInitLyrics()
|
||||||
lrcView.apply {
|
lrcView.apply {
|
||||||
setDraggable(true, object : CoverLrcView.OnPlayClickListener {
|
setDraggable(true) { time ->
|
||||||
override fun onPlayClick(time: Long): Boolean {
|
MusicPlayerRemote.seekTo(time.toInt())
|
||||||
MusicPlayerRemote.seekTo(time.toInt())
|
MusicPlayerRemote.resumePlaying()
|
||||||
MusicPlayerRemote.resumePlaying()
|
true
|
||||||
return true
|
}
|
||||||
|
setOnFlingXListener { velocityX ->
|
||||||
|
when {
|
||||||
|
velocityX < 0 -> {
|
||||||
|
MusicPlayerRemote.playNextSong()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
velocityX > 0 -> {
|
||||||
|
MusicPlayerRemote.playPreviousSong()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ import android.view.animation.LinearInterpolator
|
||||||
import android.widget.Scroller
|
import android.widget.Scroller
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
@ -67,6 +68,7 @@ class CoverLrcView @JvmOverloads constructor(
|
||||||
private var mDefaultLabel: String? = null
|
private var mDefaultLabel: String? = null
|
||||||
private var mLrcPadding = 0f
|
private var mLrcPadding = 0f
|
||||||
private var mOnPlayClickListener: OnPlayClickListener? = null
|
private var mOnPlayClickListener: OnPlayClickListener? = null
|
||||||
|
private var mOnFlingXListener: OnFlingXListener? = null
|
||||||
private var mAnimator: ValueAnimator? = null
|
private var mAnimator: ValueAnimator? = null
|
||||||
private var mGestureDetector: GestureDetector? = null
|
private var mGestureDetector: GestureDetector? = null
|
||||||
private var mScroller: Scroller? = null
|
private var mScroller: Scroller? = null
|
||||||
|
@ -131,6 +133,9 @@ class CoverLrcView @JvmOverloads constructor(
|
||||||
velocityX: Float,
|
velocityX: Float,
|
||||||
velocityY: Float
|
velocityY: Float
|
||||||
): Boolean {
|
): Boolean {
|
||||||
|
if (mOnFlingXListener != null && abs(velocityX) > abs(velocityY)) {
|
||||||
|
return mOnFlingXListener!!.onFlingX(velocityX)
|
||||||
|
}
|
||||||
if (hasLrc()) {
|
if (hasLrc()) {
|
||||||
mScroller!!.fling(
|
mScroller!!.fling(
|
||||||
0,
|
0,
|
||||||
|
@ -313,6 +318,10 @@ class CoverLrcView @JvmOverloads constructor(
|
||||||
mOnPlayClickListener = onPlayClickListener
|
mOnPlayClickListener = onPlayClickListener
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setOnFlingXListener(onFlingXListener: OnFlingXListener) {
|
||||||
|
mOnFlingXListener = onFlingXListener
|
||||||
|
}
|
||||||
|
|
||||||
/** 设置歌词为空时屏幕中央显示的文字,如“暂无歌词” */
|
/** 设置歌词为空时屏幕中央显示的文字,如“暂无歌词” */
|
||||||
fun setLabel(label: String?) {
|
fun setLabel(label: String?) {
|
||||||
runOnUi {
|
runOnUi {
|
||||||
|
@ -661,6 +670,7 @@ class CoverLrcView @JvmOverloads constructor(
|
||||||
|
|
||||||
/** 获取歌词距离视图顶部的距离 采用懒加载方式 */
|
/** 获取歌词距离视图顶部的距离 采用懒加载方式 */
|
||||||
private fun getOffset(line: Int): Float {
|
private fun getOffset(line: Int): Float {
|
||||||
|
if (mLrcEntryList.isEmpty()) return 0F
|
||||||
if (mLrcEntryList[line].offset == Float.MIN_VALUE) {
|
if (mLrcEntryList[line].offset == Float.MIN_VALUE) {
|
||||||
var offset = (height / 2).toFloat()
|
var offset = (height / 2).toFloat()
|
||||||
for (i in 1..line) {
|
for (i in 1..line) {
|
||||||
|
@ -686,7 +696,7 @@ class CoverLrcView @JvmOverloads constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 播放按钮点击监听器,点击后应该跳转到指定播放位置 */
|
/** 播放按钮点击监听器,点击后应该跳转到指定播放位置 */
|
||||||
interface OnPlayClickListener {
|
fun interface OnPlayClickListener {
|
||||||
/**
|
/**
|
||||||
* 播放按钮被点击,应该跳转到指定播放位置
|
* 播放按钮被点击,应该跳转到指定播放位置
|
||||||
*
|
*
|
||||||
|
@ -695,6 +705,10 @@ class CoverLrcView @JvmOverloads constructor(
|
||||||
fun onPlayClick(time: Long): Boolean
|
fun onPlayClick(time: Long): Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun interface OnFlingXListener {
|
||||||
|
fun onFlingX(velocityX: Float): Boolean
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val ADJUST_DURATION: Long = 100
|
private const val ADJUST_DURATION: Long = 100
|
||||||
private const val TIMELINE_KEEP_TIME = 4 * DateUtils.SECOND_IN_MILLIS
|
private const val TIMELINE_KEEP_TIME = 4 * DateUtils.SECOND_IN_MILLIS
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue