diff --git a/app/build.gradle b/app/build.gradle
index 11f64dfae..1071e69ec 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -212,6 +212,9 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.4.2'
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+ implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+ implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.2'
+ implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 911655554..08f6d0fee 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1086,6 +1086,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomAlbumActivity.kt b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomAlbumActivity.kt
new file mode 100644
index 000000000..dd6dfd865
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomAlbumActivity.kt
@@ -0,0 +1,145 @@
+package com.yizhuan.erban.avroom.activity
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.content.Intent
+import android.graphics.Canvas
+import android.graphics.LinearGradient
+import android.graphics.Shader
+import androidx.activity.viewModels
+import androidx.core.content.ContextCompat
+import androidx.fragment.app.Fragment
+import androidx.viewpager2.adapter.FragmentStateAdapter
+import com.yizhuan.erban.R
+import com.yizhuan.erban.avroom.fragment.RoomAlbumFragment
+import com.yizhuan.erban.avroom.model.RoomAlbumViewModel
+import com.yizhuan.erban.base.BaseViewBindingActivity
+import com.yizhuan.erban.databinding.ActivityRoomAlbumBinding
+import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper
+import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
+import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter
+import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator
+import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView
+import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.indicators.GradientLinePagerIndicator
+import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator
+import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.titles.ColorTransitionPagerTitleView
+
+class RoomAlbumActivity : BaseViewBindingActivity() {
+
+ val viewModel: RoomAlbumViewModel by viewModels()
+
+ override fun init() {
+ initTitleBar(getString(R.string.room_album))
+ mTitleBar.setBackgroundResource(R.color.color_F5F6FA)
+
+ val titles = listOf("我的照片", "普通照片", "解鎖照片")
+
+ //binding.tvUpload.setImageResource(R.drawable.bg_activity_room_album_upload)
+
+ binding.indicator.navigator = CommonNavigator(this).apply {
+ isAdjustMode = true
+
+ adapter = object : CommonNavigatorAdapter() {
+ var startColor = ContextCompat.getColor(context, R.color.color_5CF1FF)
+ var endColor = ContextCompat.getColor(context, R.color.color_CF70FF)
+ override fun getCount(): Int {
+ return 3
+ }
+
+ override fun getTitleView(context: Context, index: Int): IPagerTitleView {
+ return ColorTransitionPagerTitleView(context).apply {
+ normalColor = ContextCompat.getColor(context, R.color.color_767585)
+ selectedColor = ContextCompat.getColor(context, R.color.color_1F1B4F)
+ text = titles[index]
+ }
+ }
+
+ override fun getIndicator(context: Context?): IPagerIndicator {
+ return object : GradientLinePagerIndicator(context) {
+ @SuppressLint("DrawAllocation")
+ override fun onDraw(canvas: Canvas) {
+ val g = LinearGradient(
+ lineRect.left,
+ lineRect.top,
+ lineRect.right,
+ lineRect.bottom,
+ intArrayOf(startColor, endColor),
+ null,
+ Shader.TileMode.CLAMP
+ )
+ paint.shader = g
+ canvas.drawRoundRect(lineRect, roundRadius, roundRadius, paint)
+ }
+
+ }.apply {
+ lineHeight = resources.getDimensionPixelOffset(R.dimen.dp_4).toFloat()
+ lineWidth = resources.getDimensionPixelOffset(R.dimen.dp_15).toFloat()
+ roundRadius = resources.getDimensionPixelOffset(R.dimen.dp_2).toFloat()
+ //yOffset = resources.getDimensionPixelOffset(R.dimen.dp_4).toFloat()
+ mode = LinePagerIndicator.MODE_EXACTLY
+ }
+ }
+ }
+ }
+ ViewPagerHelper.bind(binding.indicator, binding.vp)
+
+ val fragments = listOf(
+ RoomAlbumFragment.newInstance(),
+ RoomAlbumFragment.newInstance(),
+ RoomAlbumFragment.newInstance()
+ )
+
+ binding.vp.adapter = object : FragmentStateAdapter(this) {
+ override fun getItemCount(): Int {
+ return fragments.size
+ }
+
+ override fun createFragment(position: Int): Fragment {
+ return fragments[position]
+ }
+ }
+
+ //binding.vp.adapter = object :
+ // BaseQuickAdapter(R.layout.common_recyclerview, titles) {
+ // override fun convert(helper: BaseViewHolder, item: String) {
+ // val recyclerView = helper.getView(R.id.recycler_view)
+ // recyclerView.layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT
+ // recyclerView.layoutManager = GridLayoutManager(this@RoomAlbumActivity, 2)
+ // val offset = resources.getDimensionPixelOffset(R.dimen.dp_15)
+ // recyclerView.addItemDecoration(
+ // GridSpacingItemNewDecoration(
+ // offset,
+ // offset,
+ // true
+ // )
+ // )
+ // recyclerView.adapter =
+ // object : BaseQuickAdapter(R.layout.item_room_album) {
+ // override fun convert(helper: BaseViewHolder, item: Int?) {
+ // ImageLoadUtils.loadImageWithBlur(
+ // context,
+ // "https://image.hfighting.com/FsElQzIALqAixbAT56riNMotkAZR?imageslim",
+ // helper.getView(R.id.iv_pic),
+ // 25, 4
+ // )
+ //
+ // }
+ // }.apply {
+ // val list = mutableListOf()
+ // for (i in 0 until 20) {
+ // list.add(0)
+ // }
+ // setNewData(list)
+ // }
+ // }
+ //}
+ }
+
+ companion object {
+ @JvmStatic
+ fun start(context: Context) {
+ val starter = Intent(context, RoomAlbumActivity::class.java)
+ context.startActivity(starter)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/anotherroompk/RoomPKBoardView.kt b/app/src/main/java/com/yizhuan/erban/avroom/anotherroompk/RoomPKBoardView.kt
index a6fdf9ea1..1af4a43fd 100644
--- a/app/src/main/java/com/yizhuan/erban/avroom/anotherroompk/RoomPKBoardView.kt
+++ b/app/src/main/java/com/yizhuan/erban/avroom/anotherroompk/RoomPKBoardView.kt
@@ -39,7 +39,7 @@ class RoomPKBoardView @JvmOverloads constructor(
) : DragLayout(context, attrs, defStyleAttr) {
private val binding = LayoutRoomPkBoardViewBinding.inflate(LayoutInflater.from(context))
- private val observer = Observer { updateView(it) }
+ private val observer = Observer { updateView(it) }
private var disposable: Disposable? = null
private lateinit var helpPopupWindow: PopupWindow
private var roomPkBean: RoomPkBean? = null
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumFragment.kt b/app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumFragment.kt
new file mode 100644
index 000000000..cf9b7b45f
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumFragment.kt
@@ -0,0 +1,51 @@
+package com.yizhuan.erban.avroom.fragment
+
+import androidx.fragment.app.viewModels
+import androidx.recyclerview.widget.GridLayoutManager
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.chad.library.adapter.base.BaseViewHolder
+import com.yizhuan.erban.R
+import com.yizhuan.erban.base.BaseViewBindingFragment
+import com.yizhuan.erban.databinding.FragmentRoomAlbumBinding
+import com.yizhuan.erban.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration
+
+class RoomAlbumFragment : BaseViewBindingFragment() {
+
+ private val viewModel: RoomAlbumViewModel by viewModels()
+
+ override fun init() {
+ binding.recyclerView.layoutManager = GridLayoutManager(context, 2)
+ val offset = resources.getDimensionPixelOffset(R.dimen.dp_15)
+ binding.recyclerView.addItemDecoration(
+ GridSpacingItemNewDecoration(
+ offset,
+ offset,
+ true
+ )
+ )
+ binding.recyclerView.adapter =
+ object : BaseQuickAdapter(R.layout.item_room_album) {
+ override fun convert(helper: BaseViewHolder, item: Int?) {
+ //ImageLoadUtils.loadImageWithBlur(
+ // context,
+ // "https://image.hfighting.com/FsElQzIALqAixbAT56riNMotkAZR?imageslim",
+ // helper.getView(R.id.iv_pic),
+ // 25, 4
+ //)
+
+ }
+ }.apply {
+ val list = mutableListOf()
+ for (i in 0 until 20) {
+ list.add(0)
+ }
+ setNewData(list)
+ }
+
+ }
+
+ companion object {
+ fun newInstance() = RoomAlbumFragment()
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumViewModel.kt b/app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumViewModel.kt
new file mode 100644
index 000000000..6993d1952
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumViewModel.kt
@@ -0,0 +1,6 @@
+package com.yizhuan.erban.avroom.fragment
+
+import com.yizhuan.erban.base.BaseViewModel
+
+class RoomAlbumViewModel : BaseViewModel() {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/model/RoomAlbumViewModel.kt b/app/src/main/java/com/yizhuan/erban/avroom/model/RoomAlbumViewModel.kt
new file mode 100644
index 000000000..0f4bc6809
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/model/RoomAlbumViewModel.kt
@@ -0,0 +1,9 @@
+package com.yizhuan.erban.avroom.model
+
+import com.yizhuan.erban.base.BaseViewModel
+
+class RoomAlbumViewModel :BaseViewModel(){
+ init {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yizhuan/erban/view/ShadowFrameLayout.java b/app/src/main/java/com/yizhuan/erban/view/ShadowFrameLayout.java
new file mode 100644
index 000000000..5ba281241
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/view/ShadowFrameLayout.java
@@ -0,0 +1,92 @@
+package com.yizhuan.erban.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.widget.FrameLayout;
+
+import androidx.annotation.ColorInt;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
+
+import com.yizhuan.erban.R;
+
+/**
+ * @author wzq
+ */
+public class ShadowFrameLayout extends FrameLayout {
+
+ private Paint mShadowPaint;
+ private float mCornerRadius;
+ /**
+ * 只有上面有阴影
+ */
+ private boolean mShadowTop;
+
+ private float mShadowRadius;
+
+ private RectF mRectF;
+
+ public ShadowFrameLayout(@NonNull Context context) {
+ this(context, null);
+ }
+
+ public ShadowFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ init(context, attrs);
+ }
+
+ public ShadowFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init(context, attrs);
+ }
+
+ private void init(Context context, AttributeSet attrs) {
+ TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ShadowFrameLayout);
+ int shadowColor = typedArray.getColor(R.styleable.ShadowFrameLayout_shadowColor,
+ ContextCompat.getColor(context, R.color.color_1E686868));
+ int backgroundColor = typedArray.getColor(R.styleable.ShadowFrameLayout_backgroundColor, Color.WHITE);
+ mShadowRadius = typedArray.getDimension(R.styleable.ShadowFrameLayout_shadowRadius, 0);
+ mCornerRadius = typedArray.getDimension(R.styleable.ShadowFrameLayout_cornerRadius, 0);
+ mShadowTop = typedArray.getBoolean(R.styleable.ShadowFrameLayout_shadowTop, false);
+ typedArray.recycle();
+
+ mShadowPaint = new Paint();
+ mShadowPaint.setShadowLayer(mShadowRadius, 0, 0, shadowColor);
+ mShadowPaint.setAntiAlias(true);
+ mShadowPaint.setColor(backgroundColor);
+ setLayerType(LAYER_TYPE_SOFTWARE, null);
+
+ mRectF = new RectF();
+ }
+
+ @Override
+ public void setBackgroundColor(@ColorInt int color) {
+ mShadowPaint.setColor(color);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int measuredWidth = getMeasuredWidth();
+ int measuredHeight = getMeasuredHeight();
+ if (mShadowTop) {
+ // 矩形只有上方有阴影
+ mRectF.set(0, mShadowRadius, measuredWidth, measuredHeight + mCornerRadius);
+ } else {
+ // 环绕阴影
+ mRectF.set(mShadowRadius, mShadowRadius, measuredWidth - mShadowRadius, measuredHeight - mShadowRadius);
+ }
+ }
+
+ @Override
+ protected void dispatchDraw(Canvas canvas) {
+ canvas.drawRoundRect(mRectF, mCornerRadius, mCornerRadius, mShadowPaint);
+ super.dispatchDraw(canvas);
+ }
+}
diff --git a/app/src/main/res/drawable-xhdpi/bg_activity_room_album_upload.png b/app/src/main/res/drawable-xhdpi/bg_activity_room_album_upload.png
new file mode 100644
index 000000000..5273fda2b
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/bg_activity_room_album_upload.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_lock_room_album.webp b/app/src/main/res/drawable-xhdpi/ic_lock_room_album.webp
new file mode 100644
index 000000000..bedc0dbed
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_lock_room_album.webp differ
diff --git a/app/src/main/res/drawable/bg_mask_room_album.xml b/app/src/main/res/drawable/bg_mask_room_album.xml
new file mode 100644
index 000000000..ea44bcbc0
--- /dev/null
+++ b/app/src/main/res/drawable/bg_mask_room_album.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_room_album_action.xml b/app/src/main/res/drawable/bg_room_album_action.xml
new file mode 100644
index 000000000..0a7d143ad
--- /dev/null
+++ b/app/src/main/res/drawable/bg_room_album_action.xml
@@ -0,0 +1,47 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_room_album.xml b/app/src/main/res/layout/activity_room_album.xml
new file mode 100644
index 000000000..ac5cba857
--- /dev/null
+++ b/app/src/main/res/layout/activity_room_album.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_room_album.xml b/app/src/main/res/layout/fragment_room_album.xml
new file mode 100644
index 000000000..82945830a
--- /dev/null
+++ b/app/src/main/res/layout/fragment_room_album.xml
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_room_album.xml b/app/src/main/res/layout/item_room_album.xml
new file mode 100644
index 000000000..3bcc552e3
--- /dev/null
+++ b/app/src/main/res/layout/item_room_album.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index f54a48c3d..c44ecf971 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -420,4 +420,12 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index a0292320f..ed4ce16bd 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -700,5 +700,6 @@
#A974FF
#C2A66FFF
#306065
+ #1E686868
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ee0ec4d83..4f10bd02a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -5134,5 +5134,7 @@
輸入數量
分解普通精靈將隨機獲得80-100個碎片
分解傳說精靈將隨機獲得400-500個碎片
+ 上傳照片
+ 房間相冊
\ No newline at end of file