From 636f5ded6f12d00f523b7746889823d8ebf3af03 Mon Sep 17 00:00:00 2001 From: ningwenqiang Date: Mon, 21 Oct 2024 18:06:12 +0800 Subject: [PATCH] =?UTF-8?q?initHourRankList=20UI=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../live/viewmodel/LivePositionViewModel.java | 108 ++++++++++++------ .../yunbao/live/views/LiveRoomViewHolder.java | 64 +++++------ live/src/main/res/layout/view_wish_list2.xml | 43 ------- 3 files changed, 107 insertions(+), 108 deletions(-) delete mode 100644 live/src/main/res/layout/view_wish_list2.xml diff --git a/live/src/main/java/com/yunbao/live/viewmodel/LivePositionViewModel.java b/live/src/main/java/com/yunbao/live/viewmodel/LivePositionViewModel.java index e16fa00bf..b24b88c24 100644 --- a/live/src/main/java/com/yunbao/live/viewmodel/LivePositionViewModel.java +++ b/live/src/main/java/com/yunbao/live/viewmodel/LivePositionViewModel.java @@ -1,54 +1,96 @@ package com.yunbao.live.viewmodel; +import android.os.Build; +import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; +import android.view.ViewTreeObserver; import androidx.lifecycle.ViewModel; +import com.momo.mcamera.util.JsonUtil; +import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.utils.SpUtil; import com.yunbao.live.R; +import java.util.HashMap; +import java.util.List; + +import io.rong.common.LibStorageUtils; + //直播时候位置做的 viewModel 注意这里 public class LivePositionViewModel extends ViewModel { - //值判断到此根节点的位置 - private View RootView ; + //直播播放区域 + private static String LIVE_BROADCAST_AREA = "live_broadcast_area"; - /** - * 计算控件 Z 相对于 ViewGroupA 的位置 - * @param child 当前控件 Z - * @param parent 目标 ViewGroupA - * @return 相对位置 [x, y] - */ - public static int[] calculateRelativePosition(View child, View parent) { - int[] position = new int[2]; // 存储相对位置 [x, y] - - child.getLocationInWindow(position); - child.getLocationOnScreen(position); - //child.getLocationInSurface(position); - - -// while (child != null && child != parent) { -// if (child instanceof ViewGroup) { -// ViewGroup viewGroup = (ViewGroup) child; -// int[] childLocation = new int[2]; -// child.getLocationInParent(viewGroup); -// position[0] += childLocation[0]; -// position[1] += childLocation[1]; -// } else { -// int[] childLocation = new int[2]; -// child.getLocationInParent((ViewGroup) child.getParent()); -// position[0] += childLocation[0]; -// position[1] += childLocation[1]; -// } -// child = child.getParent() instanceof View ? (View) child.getParent() : null; -// } - - return position; + // Recursively check the visibility of this view and all its parent views + private Boolean isViewVisible(View view) { + if (view.getVisibility() != View.VISIBLE) { + return false; + } + Object currentView = view; + while (currentView instanceof View) { + currentView = ((View) currentView).getParent(); + if (currentView instanceof View) { + View parent = (View) currentView; + if (parent.getVisibility() != View.VISIBLE) { + return false; + } + } else { + return true; + } + } + return true; } + + + public void addViewTreeObserver(View view) { + view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + // 检查view是否可见 + if (isViewVisible(view)) {//当一个控件变得可见的时候 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { + view.getViewTreeObserver().removeGlobalOnLayoutListener(this); + } else { + view.getViewTreeObserver().removeOnGlobalLayoutListener(this); + } + } + } + }); + } + + + public ViewPosition calculateRelativePosition(View child) { + int[] position = new int[2]; // 存储相对位置 [x, y] + child.getLocationInWindow(position); + return new ViewPosition(position[0], position[1], child.getWidth(), child.getHeight()); + } + + + public void saveViewPosition(String keyStr, ViewPosition saveViewPosition) { + SpUtil.setStringValue(keyStr, JsonUtil.instance.toJson(saveViewPosition)); + } + + public ViewPosition getViewPosition(String keyStr) { + String json = SpUtil.getStringValue(keyStr); + if (!TextUtils.isEmpty(json)) { + return JsonUtil.instance.fromJson(json, ViewPosition.class); + } else { + return null; + } + } + + public void saveViewPosition(View view) { + + } + + } diff --git a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java index 0a98d5c52..5a820c1ba 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java @@ -962,7 +962,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis @Override public void run() { ViewGroup.LayoutParams params1 = tricky_layout_name.getLayoutParams(); - params1.width = mChatRecyclerView.getWidth()-DpUtil.dp2px(5); + params1.width = mChatRecyclerView.getWidth() - DpUtil.dp2px(5); tricky_layout_name.setLayoutParams(params1); } }); @@ -1014,7 +1014,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis public void run() { //TODO 这里报了类型错误 android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams ViewGroup.LayoutParams params1 = sud_layout_name.getLayoutParams(); - params1.width = mChatRecyclerView.getWidth()-DpUtil.dp2px(5); + params1.width = mChatRecyclerView.getWidth() - DpUtil.dp2px(5); sud_layout_name.setLayoutParams(params1); } }); @@ -2486,7 +2486,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis new_task_send_gift_details = findViewById(R.id.new_task_send_gift_details); close_task_send_gift_close = findViewById(R.id.close_task_send_gift_close); - // setDragonTime(false); + // setDragonTime(false); } /** @@ -2822,10 +2822,10 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis newDragonGroup.setVisibility(View.VISIBLE); isDragonTime = isTime; if (isTime) { - // newDragonTv.setTextColor(ContextCompat.getColor(mContext, R.color.white)); + // newDragonTv.setTextColor(ContextCompat.getColor(mContext, R.color.white)); newDragonTv.clearFocus(); } else { - // newDragonTv.setTextColor(Color.parseColor("#F9BA03")); + // newDragonTv.setTextColor(Color.parseColor("#F9BA03")); newDragonTv.setText(R.string.dragon_immediate_participation); newDragonTv.requestFocus(); } @@ -3471,7 +3471,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis } } initWishListData(wishlistBean); - }else { + } else { stopPart2Flipper(wishFlipperRoot); } } catch (Exception e) { @@ -3520,7 +3520,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis * @param view 要从翻页器中移除的视图 */ private void stopPart2Flipper(View view) { - if (view == null || newPart2Flipper==null) return; + if (view == null || newPart2Flipper == null) return; // 获取翻页器中当前的子视图数量,以判断是否满足停止翻页的条件 newPart2Flipper.getChildCount(); @@ -3564,13 +3564,13 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis if (flipper.getChildCount() > 0) { flipper.removeAllViews(); } -// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DpUtil.dp2px(16), DpUtil.dp2px(16)); -// LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); -// textParams.leftMargin = DpUtil.dp2px(5); -// params.leftMargin = DpUtil.dp2px(5); - View hotView = LayoutInflater.from(mContext).inflate(R.layout.view_wish_list2, null); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DpUtil.dp2px(14), DpUtil.dp2px(14)); + LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + textParams.leftMargin = DpUtil.dp2px(5); + params.leftMargin = DpUtil.dp2px(5); + View hotView = LayoutInflater.from(mContext).inflate(R.layout.view_wish_list, null); hotView.setTag("hotView"); - View hourView = LayoutInflater.from(mContext).inflate(R.layout.view_wish_list2, null); + View hourView = LayoutInflater.from(mContext).inflate(R.layout.view_wish_list, null); hourView.setTag("hourView"); ImageView hotPic = hotView.findViewById(R.id.wish_pic); ImageView hourPic = hourView.findViewById(R.id.wish_pic); @@ -3578,15 +3578,15 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis mHourRank = hourView.findViewById(R.id.wish_index); mHotText.setText("0"); mHourRank.setText(mHourRank.getContext().getString(R.string.heat_add)); -// mHotText.setLayoutParams(textParams); -// mHourRank.setLayoutParams(textParams); -// mHotText.setGravity(Gravity.CENTER); -// mHourRank.setGravity(Gravity.CENTER); + mHotText.setLayoutParams(textParams); + mHourRank.setLayoutParams(textParams); + mHotText.setGravity(Gravity.CENTER); + mHourRank.setGravity(Gravity.CENTER); setHourRankData(Long.parseLong(model.getRank())); hotPic.setImageResource(R.mipmap.ic_live_hot_rank); hourPic.setImageResource(R.mipmap.ic_live_hour_rank); -// hotPic.setLayoutParams(params); -// hourPic.setLayoutParams(params); + hotPic.setLayoutParams(params); + hourPic.setLayoutParams(params); flipper.addView(hotView); flipper.addView(hourView); flipper.startFlipping(); @@ -3618,30 +3618,30 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis if (flipper.getChildCount() > 0) { flipper.removeAllViews(); } -// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DpUtil.dp2px(16), DpUtil.dp2px(16)); -// LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); -// textParams.leftMargin = DpUtil.dp2px(5); -// params.leftMargin = DpUtil.dp2px(5); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DpUtil.dp2px(11), ViewGroup.LayoutParams.WRAP_CONTENT); + LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + textParams.leftMargin = DpUtil.dp2px(5); + params.leftMargin = DpUtil.dp2px(5); API.get().pdLiveApi(mContext).getHourChartRank(mLiveUid).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(listResponseModel -> { List info = listResponseModel.getData().getInfo(); if (!info.isEmpty()) { - View hotView = LayoutInflater.from(mContext).inflate(R.layout.view_wish_list2, null); - View hourView = LayoutInflater.from(mContext).inflate(R.layout.view_wish_list2, null); + View hotView = LayoutInflater.from(mContext).inflate(R.layout.view_wish_list, null); + View hourView = LayoutInflater.from(mContext).inflate(R.layout.view_wish_list, null); ImageView hotPic = hotView.findViewById(R.id.wish_pic); ImageView hourPic = hourView.findViewById(R.id.wish_pic); mHotText = hotView.findViewById(R.id.wish_index); mHourRank = hourView.findViewById(R.id.wish_index); mHotText.setText("0"); mHourRank.setText(mHourRank.getContext().getString(R.string.heat_add)); -// mHotText.setLayoutParams(textParams); -// mHourRank.setLayoutParams(textParams); -// mHotText.setGravity(Gravity.CENTER); -// mHourRank.setGravity(Gravity.CENTER); + mHotText.setLayoutParams(textParams); + mHourRank.setLayoutParams(textParams); + mHotText.setGravity(Gravity.CENTER); + mHourRank.setGravity(Gravity.CENTER); setHourRankData(info.get(0).getRank()); hotPic.setImageResource(R.mipmap.ic_live_hot_rank); hourPic.setImageResource(R.mipmap.ic_live_hour_rank); -// hotPic.setLayoutParams(params); -// hourPic.setLayoutParams(params); + hotPic.setLayoutParams(params); + hourPic.setLayoutParams(params); flipper.addView(hotView); flipper.addView(hourView); flipper.startFlipping(); @@ -4221,7 +4221,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis } public void showGiftWall(String toUid, boolean isAnchor, String mAnchorName, String mAvatarUrl) { - // GiftWallDialog giftWallDialog = new GiftWallDialog(); + // GiftWallDialog giftWallDialog = new GiftWallDialog(); new com.yunbao.common.dialog.GiftWallDialog(mContext, toUid, mAnchorName, toUid, isAnchor).setFullWindows(false).showDialog(); // Bundle bundle = new Bundle(); // bundle.putString(Constants.LIVE_UID, mLiveUid); diff --git a/live/src/main/res/layout/view_wish_list2.xml b/live/src/main/res/layout/view_wish_list2.xml deleted file mode 100644 index e0ae54a5d..000000000 --- a/live/src/main/res/layout/view_wish_list2.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - \ No newline at end of file