Improve avatar page

This commit is contained in:
Phillip Thelen 2022-06-07 18:20:08 +02:00
parent f6b3ef3cef
commit 02e74aa452
5 changed files with 58 additions and 12 deletions

View file

@ -375,17 +375,17 @@ class AvatarView : FrameLayout {
offset = PointF(-25.0f, 0.0f) // compact hero box
}
LayerType.MOUNT_BODY, LayerType.MOUNT_HEAD -> offset =
PointF(25.0f, 18.0f) // full hero box
PointF(24.0f, 18.0f) // full hero box
LayerType.CHAIR, LayerType.BACK, LayerType.SKIN, LayerType.SHIRT, LayerType.ARMOR, LayerType.BODY, LayerType.HEAD_0, LayerType.HAIR_BASE, LayerType.HAIR_BANGS, LayerType.HAIR_MUSTACHE, LayerType.HAIR_BEARD, LayerType.EYEWEAR, LayerType.VISUAL_BUFF, LayerType.HEAD, LayerType.HEAD_ACCESSORY, LayerType.HAIR_FLOWER, LayerType.SHIELD, LayerType.WEAPON, LayerType.ZZZ -> if (showMount || showPet) {
// full hero box
offset = when {
hasMount -> if (layerMap[LayerType.MOUNT_HEAD]?.contains("Kangaroo") == true) {
PointF(25.0f, 18f)
PointF(24.0f, 18f)
} else {
PointF(25.0f, 0f)
PointF(24.0f, 0f)
}
hasPet -> PointF(25.0f, 24.5f)
else -> PointF(25.0f, 28.0f)
hasPet -> PointF(24.0f, 24.5f)
else -> PointF(24.0f, 28.0f)
}
} else if (showBackground) {
// compact hero box

View file

@ -1,10 +1,17 @@
package com.habitrpg.wearos.habitica.ui.activities
import android.os.Build
import android.os.Bundle
import android.view.Gravity
import android.view.ViewOutlineProvider
import android.widget.FrameLayout
import androidx.activity.viewModels
import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.wearos.habitica.databinding.ActivityAvatarBinding
import com.habitrpg.wearos.habitica.ui.viewmodels.AvatarViewModel
import dagger.hilt.android.AndroidEntryPoint
import java.lang.Integer.max
import kotlin.math.roundToInt
@AndroidEntryPoint
class AvatarActivity: BaseActivity<ActivityAvatarBinding, AvatarViewModel>() {
@ -15,7 +22,35 @@ class AvatarActivity: BaseActivity<ActivityAvatarBinding, AvatarViewModel>() {
super.onCreate(savedInstanceState)
viewModel.user.observe(this) {
binding.root.setAvatar(it)
binding.avatarView.setAvatar(it)
}
}
override fun onStart() {
super.onStart()
val params = binding.root.layoutParams as FrameLayout.LayoutParams
val maxSize = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
max(windowManager.currentWindowMetrics.bounds.bottom, windowManager.currentWindowMetrics.bounds.right)
} else {
max(windowManager.defaultDisplay.width, windowManager.defaultDisplay.height)
}
var factor = (maxSize / 46f) / 3f
var viewSize = 138 * factor.roundToInt()
if (maxSize - viewSize > 20.dpToPx(this)) {
viewSize += 45
factor += 1
}
params.width = viewSize
params.height = viewSize
params.gravity = Gravity.CENTER
binding.root.layoutParams = params
val avatarParams = binding.avatarView.layoutParams as FrameLayout.LayoutParams
avatarParams.width = 141 * factor.roundToInt()
avatarParams.height = 147 * factor.roundToInt()
binding.avatarView.layoutParams = avatarParams
binding.root.outlineProvider = ViewOutlineProvider.BACKGROUND
binding.root.clipToOutline = true
}
}

View file

@ -1,6 +1,5 @@
package com.habitrpg.wearos.habitica.util
import android.util.Log
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import androidx.wear.widget.WearableLinearLayoutManager
@ -34,7 +33,6 @@ class HabiticaScrollingLayoutCallback : WearableLinearLayoutManager.LayoutCallba
scaleX = scale
scaleY = scale
translationY = (height - (scale * height)) / 2 * if (yRelativeToCenterOffset > 0.5) -1 else 1
Log.d("HabiticaScrollingLayoutCallback", "onLayoutFinished: $translationY $scale")
alpha = scale * 2
}
}

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<solid android:color="?background" />
</shape>

View file

@ -1,7 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<com.habitrpg.common.habitica.views.AvatarView xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center">
</com.habitrpg.common.habitica.views.AvatarView>
android:layout_gravity="center"
android:background="@drawable/avatar_cutout"
android:clipChildren="true"
android:clipToOutline="true"
android:outlineProvider="background"
android:clipToPadding="true">
<com.habitrpg.common.habitica.views.AvatarView
android:id="@+id/avatar_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"/>
</FrameLayout>