mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Improve avatar page
This commit is contained in:
parent
f6b3ef3cef
commit
02e74aa452
5 changed files with 58 additions and 12 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
4
wearos/src/main/res/drawable/avatar_cutout.xml
Normal file
4
wearos/src/main/res/drawable/avatar_cutout.xml
Normal 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>
|
||||
|
|
@ -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>
|
||||
Loading…
Reference in a new issue