diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/bean/BottomLayerViewWrapper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/bean/BottomLayerViewWrapper.java new file mode 100644 index 0000000000..5dd939ff67 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/bean/BottomLayerViewWrapper.java @@ -0,0 +1,46 @@ +package com.mogo.module.extensions.bean; + +import android.view.View; + +/** + * 底层view封装 + * + * @author tongchenfei + */ +public class BottomLayerViewWrapper { + private View view; + private int x; + private int y; + + public BottomLayerViewWrapper(){} + + public BottomLayerViewWrapper(View view, int x, int y) { + this.view = view; + this.x = x; + this.y = y; + } + + public View getView() { + return view; + } + + public void setView(View view) { + this.view = view; + } + + public int getX() { + return x; + } + + public void setX(int x) { + this.x = x; + } + + public int getY() { + return y; + } + + public void setY(int y) { + this.y = y; + } +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index 768006b117..827f9320e1 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -1,5 +1,6 @@ package com.mogo.module.extensions.entrance; +import android.content.Context; import android.content.Intent; import android.graphics.Rect; import android.os.Bundle; @@ -8,6 +9,7 @@ import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; @@ -38,6 +40,7 @@ import com.mogo.module.extensions.ExtensionsModuleConst; import com.mogo.module.extensions.R; import com.mogo.module.extensions.navi.NaviInfoView; import com.mogo.module.extensions.userinfo.UserInfo; +import com.mogo.module.extensions.utils.EntranceViewHolder; import com.mogo.module.extensions.utils.TopViewAnimHelper; import com.mogo.module.share.manager.ServiceApisManager; import com.mogo.service.IMogoServiceApis; @@ -153,6 +156,7 @@ public class EntranceFragment extends MvpFragment{ + TextView tv = new TextView(getContext()); + tv.setText("entrance add"); + mApis.getEntranceButtonController().addBottomLayerView(tv, 50, 50); + }); } @Override diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/MogoEntranceButtonControllerImpl.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/MogoEntranceButtonControllerImpl.java index 2b4f032948..17ee75ccb4 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/MogoEntranceButtonControllerImpl.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/MogoEntranceButtonControllerImpl.java @@ -1,9 +1,11 @@ package com.mogo.module.extensions.entrance; import android.content.Context; +import android.view.View; import android.widget.TextView; import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.module.extensions.utils.EntranceViewHolder; import com.mogo.service.MogoServicePaths; import com.mogo.service.entrance.ButtonIndex; import com.mogo.service.entrance.IMogoEntranceButtonController; @@ -22,6 +24,21 @@ public class MogoEntranceButtonControllerImpl implements IMogoEntranceButtonCont return MogoEntranceButtons.getButton( index ); } + @Override + public void addBottomLayerView(View view) { + EntranceViewHolder.getInstance().addBottomLayerView(view); + } + + @Override + public void addBottomLayerView(View view, int x, int y) { + EntranceViewHolder.getInstance().addBottomLayerView(view, x, y); + } + + @Override + public void removeBottomLayerView(View view) { + EntranceViewHolder.getInstance().removeBottomLayerView(view); + } + @Override public void init( Context context ) { diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/EntranceViewHolder.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/EntranceViewHolder.java new file mode 100644 index 0000000000..b35687f42c --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/EntranceViewHolder.java @@ -0,0 +1,94 @@ +package com.mogo.module.extensions.utils; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; + +import com.mogo.module.extensions.bean.BottomLayerViewWrapper; +import com.mogo.utils.logger.Logger; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * 入口页view管理 + * @author tongchenfei + */ +public class EntranceViewHolder { + private static final String TAG = "EntranceViewHolder"; + private List preAddView = new ArrayList<>(); + private EntranceViewHolder(){} + private volatile static EntranceViewHolder instance = null; + public static EntranceViewHolder getInstance(){ + if (instance == null) { + synchronized (EntranceViewHolder.class) { + if (instance == null) { + instance = new EntranceViewHolder(); + } + } + } + return instance; + } + private ViewGroup rootViewGroup = null; + public void initRootViewGroup(View rootView) { + Logger.i(TAG, "initRootViewGroup=="); + if(rootView instanceof ViewGroup) { + Logger.d(TAG, "initRootViewGroup 赋值"); + rootViewGroup = (ViewGroup) rootView.getParent(); + if (!preAddView.isEmpty()) { + Logger.d(TAG, "initRootViewGroup 增加底层view: " + preAddView.size()); + Iterator iterator = preAddView.iterator(); + while (iterator.hasNext()) { + BottomLayerViewWrapper wrapper = iterator.next(); + realAddView(wrapper); + iterator.remove(); + } + } + } + } + + public void addBottomLayerView(View view) { + Logger.d(TAG, "addBottomLayerView, rootViewGroup is null: " + (rootViewGroup == null)); + addBottomLayerView(view, 0, 0); + } + + public void addBottomLayerView(View view, int x, int y) { + Logger.d(TAG, "addBottomLayerView, rootViewGroup is null: " + (rootViewGroup == null) + + "\n x: " + x + ", y: " + y); + BottomLayerViewWrapper wrapper = new BottomLayerViewWrapper(view, x, y); + if(rootViewGroup == null) { + preAddView.add(wrapper); + }else{ + realAddView(wrapper); + } + } + + /** + * 使用的时候需要预先判断rootViewGroup是否为空,本方法默认rootViewGroup不为空 + */ + private void realAddView(BottomLayerViewWrapper wrapper){ + FrameLayout.LayoutParams params = + new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, + FrameLayout.LayoutParams.WRAP_CONTENT); + params.topMargin = wrapper.getY(); + params.leftMargin = wrapper.getX(); + View v = wrapper.getView(); + v.setLayoutParams(params); + rootViewGroup.addView(v, 0); + } + + public void removeBottomLayerView(View view) { + if (rootViewGroup != null) { + rootViewGroup.removeView(view); + } + Iterator iterator = preAddView.iterator(); + while (iterator.hasNext()) { + BottomLayerViewWrapper wrapper = iterator.next(); + if (wrapper.getView().equals(view)) { + iterator.remove(); + } + } + } + +} diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml index bae7449c91..495a892b37 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml @@ -14,7 +14,7 @@ + android:layout_height="wrap_content" /> + app:layout_goneMarginTop="@dimen/module_ext_north_goneMarginTop" + tools:visibility="visible" /> @@ -51,12 +51,12 @@ android:layout_height="@dimen/module_ext_button_height" android:layout_marginTop="@dimen/module_ext_camera_button_marginTop" android:background="@drawable/module_ext_dw_common_corner_bkg" - android:orientation="vertical" android:gravity="center_horizontal" + android:orientation="vertical" android:visibility="gone" - tools:visibility="gone" app:layout_constraintLeft_toLeftOf="@+id/module_map_id_navi_bg" - app:layout_constraintTop_toBottomOf="@+id/module_map_id_navi_bg"> + app:layout_constraintTop_toBottomOf="@+id/module_map_id_navi_bg" + tools:visibility="gone">