Эх сурвалжийг харах

feat: 声波纹和时间优化

DoggyZhang 2 сар өмнө
parent
commit
8daa2fa53e

+ 35 - 3
app/src/main/java/com/adealink/weparty/commonui/ripple/RippleView.kt

@@ -4,10 +4,14 @@ import android.content.Context
 import android.graphics.Canvas
 import android.graphics.Color
 import android.graphics.Paint
+import android.os.Build
 import android.util.AttributeSet
 import android.view.View
+import android.view.WindowManager
 import androidx.annotation.ColorInt
+import androidx.core.content.ContextCompat
 import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.log.Log
 import com.adealink.weparty.R
 import com.adealink.weparty.commonui.ripple.lifecyle.RippleLifecycle
 import com.adealink.weparty.commonui.ripple.lifecyle.RippleLifecycleAdapter
@@ -58,6 +62,8 @@ class RippleView : View {
     private var circleCount: Int = 5
     private var circleStyle: Paint.Style = Paint.Style.FILL
     private var speed: Float = 0.5f
+
+    private var duration: Int = 200
     private var circleStrokeWidth: Float = 3f
 
 
@@ -81,8 +87,8 @@ class RippleView : View {
                     circleCount = array.getInt(indexedValue, 2)
                 }
 
-                R.styleable.RippleView_ripple_circle_speed -> {
-                    speed = array.getFloat(indexedValue, speed)
+                R.styleable.RippleView_ripple_circle_duration -> {
+                    duration = array.getInt(indexedValue, duration)
                 }
 
                 R.styleable.RippleView_ripple_circle_stroke_width -> {
@@ -135,9 +141,34 @@ class RippleView : View {
         //circleMaxRadius = (width / 2 - circleStrokeWidth).toInt()
 //        circleCenterX = width / 2f
 //        circleCenterY = height / 2f
+        circleList.clear()
         circleList.add(RippleCircle(circleMinRadius, MAX_ALPHA))
     }
 
+    private fun initSpeed() {
+        val refreshRate = getDisplayRefreshRate(context)
+        val refreshInterval = 1000f / refreshRate
+        val refreshCount = duration / refreshInterval
+        speed = (circleMaxRadius() - circleMinRadius) / refreshCount
+    }
+
+    private var refreshRate: Int = 0
+    fun getDisplayRefreshRate(context: Context): Int {
+        if (refreshRate != 0) {
+            return refreshRate
+        }
+        val display = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+            context.display.refreshRate
+        } else {
+            ContextCompat.getSystemService(
+                context,
+                WindowManager::class.java
+            )?.defaultDisplay?.refreshRate ?: 60f
+        }
+        refreshRate = display.toInt()
+        return refreshRate
+    }
+
     private fun circleMaxRadius(): Int {
         return (width / 2 - circleStrokeWidth).toInt()
     }
@@ -201,6 +232,7 @@ class RippleView : View {
     override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
         super.onSizeChanged(w, h, oldw, oldh)
         initCircle()
+        initSpeed()
     }
 
     /**
@@ -265,7 +297,7 @@ class RippleView : View {
             return
         }
         val minMeet = (circleMaxRadius() - circleMinRadius) / circleCount
-        val add = circleList.last().radius > minMeet + circleMinRadius
+        val add = circleList.last().radius > (minMeet + circleMinRadius)
         if (add) {
             circleList.add(RippleCircle(circleMinRadius, MAX_ALPHA))
         }

+ 0 - 1
app/src/main/java/com/adealink/weparty/module/playmate/widget/SoundView.kt

@@ -77,7 +77,6 @@ class SoundView @JvmOverloads constructor(
                 MSG_UPDATE_PLAY_DURATION -> {
                     val soundDuration =  soundDuration.getDuration()
                     val currentPosition = AudioPlayer.getInstance().playPosition.toLong().getDuration()
-                    Log.d("zhangfei", "soundDuration:$soundDuration, playPositon:${AudioPlayer.getInstance().playPosition}, currentPosition:$currentPosition")
                     binding.tvDuration.text = "${max(soundDuration - currentPosition, 0)}\""
                     if (AudioPlayer.getInstance().isPlaying && AudioPlayer.getInstance().path == voiceData?.path) {
                         sendEmptyMessageDelayed(MSG_UPDATE_PLAY_DURATION, 1000L)

+ 1 - 1
app/src/main/res/values/attrs.xml

@@ -457,7 +457,7 @@
         </attr>
         <attr name="ripple_circle_stroke_width" format="dimension" />
         <attr name="ripple_circle_start" format="boolean" />
-        <attr name="ripple_circle_speed" format="float" />
+        <attr name="ripple_circle_duration" format="integer" />
     </declare-styleable>
 
     <declare-styleable name="ShimmerFrameLayout">

+ 2 - 2
app/src/main/res/values/styles.xml

@@ -171,9 +171,9 @@
     <style name="CommonOnlineRipple">
         <item name="ripple_circle_color">@color/color_FF15E5E2</item>
         <item name="ripple_circle_style">STROKE</item>
-        <item name="ripple_circle_speed">0.1</item>
+        <item name="ripple_circle_duration">1200</item>
         <item name="ripple_circle_count">2</item>
-        <item name="ripple_circle_stroke_width">2dp</item>
+        <item name="ripple_circle_stroke_width">1.68dp</item>
     </style>
 
     <style name="CommonSwitchButton">

+ 4 - 4
module/playmate/src/main/java/com/adealink/weparty/playmate/setting/comp/OrderTimeRangeComp.kt

@@ -35,14 +35,14 @@ class OrderTimeRangeComp(
             } else if (fromTime.ordinal < toTime.ordinal) {
                 getCompatString(
                     R.string.playmate_order_setting_time_today_desc,
-                    fromTime.time,
-                    toTime.time
+                    fromTime.time(),
+                    toTime.time()
                 )
             } else {
                 getCompatString(
                     R.string.playmate_order_setting_time_tomorrow_desc,
-                    fromTime.time,
-                    toTime.time
+                    fromTime.time(),
+                    toTime.time()
                 )
             }
         }

+ 2 - 2
module/playmate/src/main/java/com/adealink/weparty/playmate/setting/viewmodel/OrderSettingViewModel.kt

@@ -51,7 +51,7 @@ class OrderSettingViewModel : BaseViewModel() {
         viewModelScope.launch {
             val rlt = playmateHttpService.setupBusinessTime(
                 SetupBusinessTimeReq(
-                    timeRange = "${from.time}-${to.time}",
+                    timeRange = "${from.time()}-${to.time()}",
                     weekDays = weekDayLD.value?.map { it.day } ?: emptyList()
                 )
             )
@@ -68,7 +68,7 @@ class OrderSettingViewModel : BaseViewModel() {
         viewModelScope.launch {
             val rlt = playmateHttpService.setupBusinessTime(
                 SetupBusinessTimeReq(
-                    timeRange = "${timeRangeLD.value?.first?.time}-${timeRangeLD.value?.second?.time}",
+                    timeRange = "${timeRangeLD.value?.first?.time()}-${timeRangeLD.value?.second?.time()}",
                     weekDays = weekDays.map { it.day },
                 )
             )

+ 8 - 7
module/playmate/src/main/res/layout/item_playmate_home_list.xml

@@ -10,14 +10,14 @@
     <com.adealink.weparty.commonui.ripple.RippleView
         android:id="@+id/v_online"
         style="@style/CommonOnlineRipple"
-        android:layout_width="80dp"
-        android:layout_height="80dp"
+        android:layout_width="96dp"
+        android:layout_height="96dp"
         android:visibility="gone"
         app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
         app:layout_constraintEnd_toEndOf="@id/iv_avatar"
         app:layout_constraintStart_toStartOf="@id/iv_avatar"
         app:layout_constraintTop_toTopOf="@id/iv_avatar"
-        app:ripple_circle_min_radius="39dp"
+        app:ripple_circle_min_radius="38dp"
         tools:visibility="visible" />
 
     <com.adealink.weparty.commonui.imageview.AvatarView
@@ -33,8 +33,9 @@
         android:id="@+id/v_voice"
         android:layout_width="wrap_content"
         android:layout_height="26dp"
-        android:layout_marginBottom="2dp"
-        app:layout_constraintBottom_toTopOf="@id/v_price"
+        android:layout_marginBottom="-10dp"
+        android:visibility="visible"
+        app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
         app:layout_constraintEnd_toEndOf="@id/iv_avatar"
         app:layout_constraintStart_toStartOf="@id/iv_avatar"
         app:sound_duration_text_size="12sp"
@@ -44,10 +45,10 @@
     <com.adealink.weparty.module.playmate.widget.PriceView
         android:id="@+id/v_price"
         style="@style/CommonPriceView"
-        android:layout_marginTop="3.5dp"
+        android:layout_marginTop="4.5dp"
         app:layout_constraintEnd_toEndOf="@id/iv_avatar"
         app:layout_constraintStart_toStartOf="@id/iv_avatar"
-        app:layout_constraintTop_toBottomOf="@id/iv_avatar"
+        app:layout_constraintTop_toBottomOf="@id/v_voice"
         app:price_icon_size="14.4dp"
         app:price_text_bold="true"
         app:price_text_size="14sp"

+ 2 - 2
module/profile/src/main/java/com/adealink/weparty/profile/relation/VisitorFragment.kt

@@ -50,8 +50,8 @@ class VisitorFragment : BaseFragment(R.layout.fragment_visitor),
         binding.rvVisitor.adapter = listAdapter
         binding.rvVisitor.addItemDecoration(
             VerticalSpaceItemDecoration(
-                20.dp(),
-                firstSpaceHeight = 16.dp()
+                0,
+                firstSpaceHeight = 6.dp()
             )
         )
     }

+ 1 - 2
module/profile/src/main/res/layout/fragment_visitor.xml

@@ -12,8 +12,7 @@
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/rv_visitor"
             android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:paddingHorizontal="16dp" />
+            android:layout_height="match_parent" />
     </com.scwang.smart.refresh.layout.SmartRefreshLayout>
 
     <com.adealink.weparty.commonui.widget.CommonEmptyErrorView

+ 7 - 4
module/profile/src/main/res/layout/item_relationship_visitor.xml

@@ -3,12 +3,13 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="50dp">
+    android:layout_height="60dp">
 
     <com.adealink.weparty.commonui.imageview.AvatarView
         android:id="@+id/iv_avatar"
         android:layout_width="40dp"
         android:layout_height="40dp"
+        android:layout_marginStart="16dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
@@ -16,14 +17,15 @@
     <com.adealink.weparty.commonui.ripple.RippleView
         android:id="@+id/v_online"
         style="@style/CommonOnlineRipple"
-        android:layout_width="50dp"
-        android:layout_height="50dp"
+        android:layout_width="54dp"
+        android:layout_height="54dp"
         android:visibility="gone"
+        app:ripple_circle_stroke_width="1.4dp"
         app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
         app:layout_constraintEnd_toEndOf="@id/iv_avatar"
         app:layout_constraintStart_toStartOf="@id/iv_avatar"
         app:layout_constraintTop_toTopOf="@id/iv_avatar"
-        app:ripple_circle_min_radius="23dp"
+        app:ripple_circle_min_radius="20dp"
         tools:visibility="visible" />
 
     <androidx.appcompat.widget.AppCompatTextView
@@ -67,6 +69,7 @@
         android:id="@+id/tv_visit"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_marginEnd="16dp"
         android:gravity="center"
         android:includeFontPadding="false"
         android:text="@string/profile_visitor_desc"