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