Commit c14df5e9e6927206d06445656ad9896a8e30ea3d

Authored by YangShuai
1 parent 4a4f3240

1 优化pop控件

Showing 22 changed files with 431 additions and 108 deletions
app/src/main/java/com/cnlive/strike/xiaojiaspeaker/MainActivity.java
... ... @@ -11,12 +11,12 @@ import com.cnlive.strike.xiaojiaspeaker.ui.activity.BluetoothConnActivity;
11 11 import com.cnlive.strike.xiaojiaspeaker.ui.activity.ConnBluetoothSuccessActivity;
12 12 import com.cnlive.strike.xiaojiaspeaker.ui.activity.DeviceInstructionActivity;
13 13 import com.cnlive.strike.xiaojiaspeaker.ui.activity.DeviceManagerActivity;
  14 +import com.cnlive.strike.xiaojiaspeaker.ui.activity.FirmwareUpdateActivity;
14 15 import com.cnlive.strike.xiaojiaspeaker.ui.activity.SearchDeviceActivity;
15 16 import com.cnlive.strike.xiaojiaspeaker.ui.activity.SpeakerMainActivity;
16 17  
17 18 public class MainActivity extends AppCompatActivity {
18 19 private static final String TAG = "MainActivity";
19   -
20 20 @Override
21 21 protected void onCreate(Bundle savedInstanceState) {
22 22 super.onCreate(savedInstanceState);
... ... @@ -25,9 +25,10 @@ public class MainActivity extends AppCompatActivity {
25 25 // startActivity(new Intent(MainActivity.this, BluetoothConnActivity.class));
26 26 // startActivity(new Intent(MainActivity.this, BlueToothStep1Activity.class));
27 27 // startActivity(new Intent(MainActivity.this, ConnBluetoothSuccessActivity.class));
28   -// startActivity(new Intent(MainActivity.this, AllDeviceActivity.class));
  28 + startActivity(new Intent(MainActivity.this, AllDeviceActivity.class));
29 29 // startActivity(new Intent(MainActivity.this, DeviceInstructionActivity.class));
30   - startActivity(new Intent(MainActivity.this, DeviceManagerActivity.class));
  30 +// startActivity(new Intent(MainActivity.this, DeviceManagerActivity.class));
  31 +// startActivity(new Intent(MainActivity.this, FirmwareUpdateActivity.class));
31 32 finish();
32 33 }
33 34  
... ...
module_xiaojiaSoundBox/src/main/AndroidManifest.xml
... ... @@ -17,7 +17,8 @@
17 17 <uses-permission android:name="android.permission.INTERNET" />
18 18  
19 19 <application>
20   - <activity android:name=".ui.activity.DeviceManagerActivity"></activity>
  20 + <activity android:name=".ui.activity.FirmwareUpdateActivity"></activity>
  21 + <activity android:name=".ui.activity.DeviceManagerActivity" />
21 22 <activity android:name=".ui.activity.DeviceInstructionActivity" />
22 23 <activity android:name=".ui.activity.AllDeviceActivity" />
23 24 <activity android:name=".ui.activity.ConnBluetoothSuccessActivity" />
... ...
module_xiaojiaSoundBox/src/main/java/com/cnlive/strike/xiaojiaspeaker/frame/presenter/FirmwareUpdateFragmentPresenter.java 0 → 100644
  1 +package com.cnlive.strike.xiaojiaspeaker.frame.presenter;
  2 +
  3 +import com.cnlive.strike.xiaojiaspeaker.frame.view.FirmwareUpdateFragmentView;
  4 +import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter;
  5 +
  6 +public class FirmwareUpdateFragmentPresenter extends MvpBasePresenter<FirmwareUpdateFragmentView> {
  7 +}
... ...
module_xiaojiaSoundBox/src/main/java/com/cnlive/strike/xiaojiaspeaker/frame/view/FirmwareUpdateFragmentView.java 0 → 100644
  1 +package com.cnlive.strike.xiaojiaspeaker.frame.view;
  2 +
  3 +import android.app.Activity;
  4 +
  5 +import com.cnlive.strike.xiaojiaspeaker.ui.fragment.FirmwareUpdateFragment;
  6 +import com.hannesdorfmann.mosby3.mvp.MvpView;
  7 +
  8 +public class FirmwareUpdateFragmentView implements MvpView {
  9 + private FirmwareUpdateFragment fragment;
  10 +
  11 + public FirmwareUpdateFragmentView(FirmwareUpdateFragment fragment) {
  12 + this.fragment = fragment;
  13 + }
  14 +
  15 + public Activity getContext() {
  16 + return fragment == null ? null : fragment.getActivity();
  17 + }
  18 +
  19 + public void initView() {
  20 + }
  21 +}
... ...
module_xiaojiaSoundBox/src/main/java/com/cnlive/strike/xiaojiaspeaker/ui/activity/FirmwareUpdateActivity.java 0 → 100644
  1 +package com.cnlive.strike.xiaojiaspeaker.ui.activity;
  2 +
  3 +import android.app.Activity;
  4 +import android.content.Intent;
  5 +import android.support.v7.app.AppCompatActivity;
  6 +import android.os.Bundle;
  7 +
  8 +import com.cnlive.strike.xiaojiaspeaker.R;
  9 +import com.cnlive.strike.xiaojiaspeaker.databinding.FragmentFirmwareUpdateBinding;
  10 +import com.cnlive.strike.xiaojiaspeaker.ui.fragment.DeviceManagerFragment;
  11 +import com.cnlive.strike.xiaojiaspeaker.ui.fragment.FirmwareUpdateFragment;
  12 +
  13 +/**
  14 + * 固件升级
  15 + */
  16 +public class FirmwareUpdateActivity extends AppCompatActivity {
  17 +
  18 + @Override
  19 + protected void onCreate(Bundle savedInstanceState) {
  20 + super.onCreate(savedInstanceState);
  21 + setContentView(R.layout.activity_search_device);
  22 + getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, FirmwareUpdateFragment.newInstance()).commitAllowingStateLoss();
  23 +
  24 + }
  25 +
  26 + public static void startActivity(Activity activity) {
  27 + activity.startActivity(new Intent(activity, FirmwareUpdateActivity.class));
  28 + }
  29 +}
... ...
module_xiaojiaSoundBox/src/main/java/com/cnlive/strike/xiaojiaspeaker/ui/adapter/AllDeviceAdapter.java
... ... @@ -2,7 +2,6 @@ package com.cnlive.strike.xiaojiaspeaker.ui.adapter;
2 2  
3 3 import android.content.Context;
4 4 import android.databinding.DataBindingUtil;
5   -import android.graphics.Color;
6 5 import android.support.annotation.NonNull;
7 6 import android.support.v4.content.ContextCompat;
8 7 import android.support.v7.widget.RecyclerView;
... ... @@ -11,16 +10,11 @@ import android.view.LayoutInflater;
11 10 import android.view.View;
12 11 import android.view.ViewGroup;
13 12  
14   -import com.clj.fastble.data.BleDevice;
15 13 import com.cnlive.strike.application.GlideApp;
16 14 import com.cnlive.strike.xiaojiaspeaker.R;
17 15 import com.cnlive.strike.xiaojiaspeaker.databinding.ListItemAllDeviceBinding;
18   -import com.cnlive.strike.xiaojiaspeaker.databinding.ListItemBluetoothDeviceBinding;
19 16 import com.cnlive.strike.xiaojiaspeaker.model.AllDeviceInfo;
20   -import com.cnlive.strike.xiaojiaspeaker.model.PopMenuInfo;
21   -import com.cnlive.strike.xiaojiaspeaker.ui.widget.popmenu.PopMenu;
22 17  
23   -import java.util.ArrayList;
24 18 import java.util.List;
25 19  
26 20 public class AllDeviceAdapter extends RecyclerView.Adapter {
... ...
module_xiaojiaSoundBox/src/main/java/com/cnlive/strike/xiaojiaspeaker/ui/fragment/AllDeviceFragment.java
1 1 package com.cnlive.strike.xiaojiaspeaker.ui.fragment;
2 2  
3   -import android.Manifest;
4   -import android.content.Intent;
5 3 import android.graphics.Color;
6 4 import android.os.Bundle;
7 5 import android.support.annotation.Nullable;
8 6 import android.support.v4.content.ContextCompat;
9   -import android.support.v7.widget.LinearLayoutManager;
10   -import android.support.v7.widget.RecyclerView;
11   -import android.view.Display;
12   -import android.view.LayoutInflater;
13 7 import android.view.View;
14   -import android.view.ViewGroup;
15   -import android.widget.Button;
16   -import android.widget.LinearLayout;
17   -import android.widget.PopupWindow;
18   -import android.widget.RelativeLayout;
19 8  
20   -import com.cnlive.libs.base.application.AppConfig;
21 9 import com.cnlive.libs.base.frame.fragment.MvpBindingFragment;
22   -import com.cnlive.libs.base.util.AlertUtil;
23 10 import com.cnlive.libs.base.util.StatusBarUtil;
24 11 import com.cnlive.libs.base.util.StatusBarUtil2;
25 12 import com.cnlive.strike.ui.widget.UIPopup;
... ... @@ -27,13 +14,9 @@ import com.cnlive.strike.xiaojiaspeaker.R;
27 14 import com.cnlive.strike.xiaojiaspeaker.databinding.FragmentAllDeviceBinding;
28 15 import com.cnlive.strike.xiaojiaspeaker.frame.presenter.AllDeviceFragmentPresenter;
29 16 import com.cnlive.strike.xiaojiaspeaker.frame.view.AllDeviceFragmentView;
30   -import com.cnlive.strike.xiaojiaspeaker.model.PopMenuInfo;
31   -import com.cnlive.strike.xiaojiaspeaker.ui.activity.BlueToothStep1Activity;
32   -import com.cnlive.strike.xiaojiaspeaker.ui.adapter.PopMenuAdapter;
  17 +import com.cnlive.strike.xiaojiaspeaker.ui.widget.popmenu.PopMenuInfo;
33 18 import com.cnlive.strike.xiaojiaspeaker.ui.widget.popmenu.PopMenu;
34   -import com.qmuiteam.qmui.alpha.QMUIAlphaButton;
35 19 import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton;
36   -import com.qmuiteam.qmui.widget.popup.QMUIPopup;
37 20  
38 21 import java.util.ArrayList;
39 22 import java.util.List;
... ... @@ -96,19 +79,22 @@ public class AllDeviceFragment extends MvpBindingFragment&lt;AllDeviceFragmentView,
96 79 List<PopMenuInfo> popMenuInfoList = new ArrayList<>();
97 80 PopMenuInfo popMenuInfo = new PopMenuInfo();
98 81 popMenuInfo.setTitle("下载中");
  82 +// popMenuInfo.setNetImag("zsdfs");
99 83 popMenuInfoList.add(popMenuInfo);
100 84 popMenuInfo = new PopMenuInfo();
101 85 popMenuInfo.setTitle("历史记录");
  86 +// popMenuInfo.setNetImag("zsdfs");
102 87 popMenuInfoList.add(popMenuInfo);
103 88 popMenuInfo = new PopMenuInfo();
104 89 popMenuInfo.setTitle("设备管理");
  90 +// popMenuInfo.setNetImag("zsdfs");
105 91 popMenuInfoList.add(popMenuInfo);
106 92  
107 93 PopMenu mPopMenu = new PopMenu.Builder(getActivity())
108 94 .addData(popMenuInfoList)
109   - .setBackgroundColor(Color.parseColor("#FA3a3a3a"))
  95 + .setBackgroundColorArray(new int[]{Color.parseColor("#363636"), Color.parseColor("#BF000000"), Color.parseColor("#BF000000")})
110 96 .setLeftAndRightMargin(20)
111   - .setHeightMargin(20)
  97 + .setTopMargin(20)
112 98 .setLineColor(R.color.white_50)
113 99 .setTextColor(R.color.white)
114 100 .setLineVisible(View.VISIBLE)
... ...
module_xiaojiaSoundBox/src/main/java/com/cnlive/strike/xiaojiaspeaker/ui/fragment/FirmwareUpdateFragment.java 0 → 100644
  1 +package com.cnlive.strike.xiaojiaspeaker.ui.fragment;
  2 +
  3 +import android.os.Bundle;
  4 +import android.support.annotation.Nullable;
  5 +import android.support.v4.content.ContextCompat;
  6 +import android.view.View;
  7 +
  8 +import com.cnlive.libs.base.frame.fragment.MvpBindingFragment;
  9 +import com.cnlive.libs.base.util.StatusBarUtil;
  10 +import com.cnlive.libs.base.util.StatusBarUtil2;
  11 +import com.cnlive.strike.xiaojiaspeaker.R;
  12 +import com.cnlive.strike.xiaojiaspeaker.databinding.FragmentFirmwareUpdateBinding;
  13 +import com.cnlive.strike.xiaojiaspeaker.frame.presenter.FirmwareUpdateFragmentPresenter;
  14 +import com.cnlive.strike.xiaojiaspeaker.frame.view.FirmwareUpdateFragmentView;
  15 +
  16 +/**
  17 + * 固件升级
  18 + */
  19 +public class FirmwareUpdateFragment extends MvpBindingFragment<FirmwareUpdateFragmentView, FirmwareUpdateFragmentPresenter, Object, FragmentFirmwareUpdateBinding> {
  20 + public static FirmwareUpdateFragment newInstance() {
  21 + FirmwareUpdateFragment fragment = new FirmwareUpdateFragment();
  22 + return fragment;
  23 + }
  24 +
  25 + @Override
  26 + protected int getLayoutId() {
  27 + return R.layout.fragment_firmware_update;
  28 + }
  29 +
  30 + @Override
  31 + public void onActivityCreated(@Nullable Bundle savedInstanceState) {
  32 + super.onActivityCreated(savedInstanceState);
  33 + StatusBarUtil.setStatusBarWrite(getActivity());
  34 + StatusBarUtil2.setColor(getActivity(), ContextCompat.getColor(getActivity(), R.color.white), 0);
  35 + }
  36 +
  37 + @Override
  38 + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
  39 + super.onViewCreated(view, savedInstanceState);
  40 + initTopBar();
  41 + if (null != getMvpView()) {
  42 + getMvpView().initView();
  43 + }
  44 + }
  45 +
  46 + private void initTopBar() {
  47 + if (null != binding) {
  48 + binding.topbar.setTitle("固件升级");
  49 + //设置返回按钮
  50 + binding.topbar.addLeftImageButton(R.drawable.icon_back, R.id.left_back).setOnClickListener(new View.OnClickListener() {
  51 + @Override
  52 + public void onClick(View view) {
  53 + getActivity().finish();
  54 + }
  55 + });
  56 + }
  57 + }
  58 +}
... ...
module_xiaojiaSoundBox/src/main/java/com/cnlive/strike/xiaojiaspeaker/ui/widget/popmenu/PopMenu.java
... ... @@ -3,7 +3,7 @@ package com.cnlive.strike.xiaojiaspeaker.ui.widget.popmenu;
3 3 import android.animation.AnimatorSet;
4 4 import android.animation.ObjectAnimator;
5 5 import android.annotation.SuppressLint;
6   -import android.content.Context;
  6 +import android.app.Activity;
7 7 import android.graphics.Color;
8 8 import android.graphics.PointF;
9 9 import android.graphics.RectF;
... ... @@ -12,25 +12,20 @@ import android.os.Build;
12 12 import android.support.annotation.ColorInt;
13 13 import android.support.annotation.DimenRes;
14 14 import android.support.annotation.NonNull;
15   -import android.support.annotation.Size;
16   -import android.support.v4.content.ContextCompat;
17 15 import android.support.v7.widget.LinearLayoutManager;
18 16 import android.support.v7.widget.RecyclerView;
19 17 import android.util.DisplayMetrics;
20   -import android.util.Log;
21 18 import android.view.Gravity;
22 19 import android.view.View;
23 20 import android.view.ViewGroup;
24 21 import android.view.ViewTreeObserver;
  22 +import android.view.WindowManager;
25 23 import android.view.animation.DecelerateInterpolator;
26 24 import android.widget.ImageView;
27 25 import android.widget.LinearLayout;
28 26 import android.widget.PopupWindow;
29 27  
30   -import com.cnlive.libs.base.util.AlertUtil;
31 28 import com.cnlive.strike.xiaojiaspeaker.R;
32   -import com.cnlive.strike.xiaojiaspeaker.model.PopMenuInfo;
33   -import com.cnlive.strike.xiaojiaspeaker.ui.adapter.PopMenuAdapter;
34 29  
35 30 import java.util.ArrayList;
36 31 import java.util.List;
... ... @@ -38,6 +33,7 @@ import java.util.List;
38 33  
39 34 /**
40 35 * PopMenu
  36 + * modify by ShinnyYang
41 37 */
42 38 public final class PopMenu {
43 39  
... ... @@ -60,13 +56,14 @@ public final class PopMenu {
60 56 private List<PopMenuInfo> mData = new ArrayList<>();
61 57 private String TAG = "PopMenu";
62 58 private Builder builder;
  59 + private OnItemClickListener onItemClickListener;
63 60  
64   - public interface OnItemClickListener {
65   -// void onItemClickListener(ActionItem item, int position);
  61 + public void setmItemClickListener(OnItemClickListener mItemClickListener) {
  62 + this.mItemClickListener = mItemClickListener;
66 63 }
67 64  
68   - public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
69   - mItemClickListener = onItemClickListener;
  65 + public interface OnItemClickListener {
  66 + void onClick(int position, PopMenuInfo popMenuInfo);
70 67 }
71 68  
72 69 public void addData(List<PopMenuInfo> data) {
... ... @@ -99,13 +96,17 @@ public final class PopMenu {
99 96 @SuppressLint("WrongConstant")
100 97 private View getContentView(final Builder builder) {
101 98 GradientDrawable drawable = new GradientDrawable();
102   - mBackgroundColor = builder.mBackgroundColor;
103   - drawable.setColor(mBackgroundColor);
104 99 drawable.setCornerRadius(builder.mCornerRadius);
105 100 //设置颜色为渐变
106   -// drawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
107   -// drawable.setColors(new int[]{mBackgroundColor,Color.parseColor("#BF000000")});
108   -// drawable.setOrientation(GradientDrawable.Orientation.TOP_BOTTOM);
  101 + drawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
  102 + if (null != builder.mBackgroundColorArray && builder.mBackgroundColorArray.length > 0) {
  103 + mBackgroundColor = builder.mBackgroundColorArray[0];
  104 + drawable.setColors(builder.mBackgroundColorArray);
  105 + } else {
  106 + mBackgroundColor = builder.mBackgroundColor;
  107 + drawable.setColor(mBackgroundColor);
  108 + }
  109 + drawable.setOrientation(GradientDrawable.Orientation.TOP_BOTTOM);
109 110 mRecyclerView = new RecyclerView(builder.mContext);
110 111 mRecyclerView.setLayoutManager(new LinearLayoutManager(builder.mContext));
111 112 mRecyclerView.setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);
... ... @@ -125,40 +126,14 @@ public final class PopMenu {
125 126 mAdapter.setLineVisible(builder.lineVisible);
126 127 }
127 128 mData.addAll(builder.mData);
128   -// mAdapter = new CommonAdapter<ActionItem>(builder.mContext,
129   -// R.layout.list_item_popmenu, mData) {
130   -//
131   -// @Override
132   -// protected void convert(final ViewHolder holder, final ActionItem item, final int position) {
133   -// holder.setText(R.id.tv_pop_menu, item.getText());
134   -// holder.setTextColor(R.id.tv_pop_menu, builder.mTextColor);
135   -// ImageView iv = holder.getView(R.id.iv_pop_menu);
136   -// if (builder.mIsShowImage) {
137   -// if (item.getResId() != 0) {
138   -// iv.setImageResource(item.getResId());
139   -// iv.setVisibility(View.VISIBLE);
140   -// } else {
141   -// iv.setVisibility(View.INVISIBLE);
142   -// }
143   -// } else {
144   -// iv.setVisibility(View.GONE);
145   -// }
146   -// if (mItemClickListener == null)
147   -// return;
148   -// holder.getConvertView().setOnClickListener(new View.OnClickListener() {
149   -// @Override
150   -// public void onClick(View v) {
151   -// mItemClickListener.onItemClickListener(item, position);
152   -// dismiss();
153   -// }
154   -// });
155   -// }
156   -// };
157 129 mRecyclerView.setAdapter(mAdapter);
158 130 mAdapter.setOnItemClickListener(new PopMenuAdapter.OnItemClickListener() {
159 131 @Override
160 132 public void onClick(int position, PopMenuInfo popMenuInfo) {
161   - AlertUtil.showDeftToast(builder.mContext, position + "");
  133 + if (null != onItemClickListener) {
  134 + onItemClickListener.onClick(position, popMenuInfo);
  135 + }
  136 + dismiss();
162 137 }
163 138 });
164 139 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
... ... @@ -187,6 +162,18 @@ public final class PopMenu {
187 162 mContentView.setOrientation(LinearLayout.VERTICAL);
188 163 mContentView.addView(mArrowView);
189 164 mContentView.addView(mRecyclerView);//为了计算高度
  165 + mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
  166 + @Override
  167 + public void onDismiss() {
  168 + //是否有背景色显示
  169 + if (builder.isShowDarkenBackground) {
  170 + //恢复背景色
  171 + WindowManager.LayoutParams lp = builder.mContext.getWindow().getAttributes();
  172 + lp.alpha = 1f;
  173 + builder.mContext.getWindow().setAttributes(lp);
  174 + }
  175 + }
  176 + });
190 177 return mContentView;
191 178 }
192 179  
... ... @@ -196,14 +183,23 @@ public final class PopMenu {
196 183  
197 184 public void show(final View anchorView) {
198 185 if (!isShowing()) {
  186 + // 是否设置设置背景颜色变暗
  187 + if (builder.isShowDarkenBackground) {
  188 + WindowManager.LayoutParams lp = builder.mContext.getWindow().getAttributes();
  189 + lp.alpha = 0.7f;
  190 + builder.mContext.getWindow().setAttributes(lp);
  191 + }
199 192 mAnchorView = anchorView;
200 193 mContentView.getViewTreeObserver().addOnGlobalLayoutListener(mLocationLayoutListener);
201   -
202 194 anchorView.addOnAttachStateChangeListener(mOnAttachStateChangeListener);
203 195 anchorView.post(new Runnable() {
204 196 @Override
205 197 public void run() {
206   - mPopupWindow.showAsDropDown(anchorView);
  198 + //设置高度,不立即生效,调用show之后,才生效
  199 +// mPopupWindow.showAsDropDown(anchorView);
  200 + // 设置popWindow的显示和消失动画
  201 + mPopupWindow.setAnimationStyle(R.style.contextMenuAnim);
  202 + mPopupWindow.showAtLocation(mAnchorView, 0, 0, 0);
207 203 }
208 204 });
209 205 }
... ... @@ -245,8 +241,8 @@ public final class PopMenu {
245 241 } else if (location.x < marginX) {
246 242 location.x = marginX;
247 243 }
248   - if (null != builder && 0 != builder.HEIGHT_MARGIN) {
249   - location.y -= builder.HEIGHT_MARGIN;
  244 + if (null != builder && 0 != builder.TOP_MARGIN) {
  245 + location.y -= builder.TOP_MARGIN;
250 246 }
251 247  
252 248 return location;
... ... @@ -336,7 +332,7 @@ public final class PopMenu {
336 332 } else {
337 333 mContentView.setPivotY(y);
338 334 }
339   - animatorSet.setDuration(300);
  335 + animatorSet.setDuration(200);
340 336 animatorSet.setInterpolator(new DecelerateInterpolator());
341 337 animatorSet.play(scaleX).with(scaleY).with(alpha);//两个动画同时开始
342 338 animatorSet.start();
... ... @@ -357,6 +353,7 @@ public final class PopMenu {
357 353 public static final class Builder {
358 354  
359 355 private int mBackgroundColor = Color.BLACK;
  356 + private int[] mBackgroundColorArray;
360 357 private int mTextColor = -1;
361 358 private boolean isCancelable = true;
362 359  
... ... @@ -364,31 +361,54 @@ public final class PopMenu {
364 361 private float mArrowHeight;
365 362 private float mArrowWidth;
366 363  
367   - private Context mContext;
  364 + private Activity mContext;
368 365 private List<PopMenuInfo> mData = new ArrayList<>();
369 366 private int mLineColor = -1;
370   - private boolean mIsShowImage = true;
371 367 private int LEFT_TO_RIGHT_MARGIN;//弹窗左右边距
372   - private int HEIGHT_MARGIN;//纵坐标边距
  368 + private int TOP_MARGIN;//上边距
373 369 private int itemBackGround = -1;
374 370 private int lineVisible = -1;
  371 + private boolean isShowDarkenBackground = false;//是否背景变暗
375 372  
376   - public Builder(@NonNull Context context) {
  373 + public Builder(@NonNull Activity context) {
377 374 mContext = context;
378 375 }
379 376  
  377 + /**
  378 + * 设置背景是否变暗
  379 + *
  380 + * @param showDarkenBackground
  381 + * @return
  382 + */
  383 + public Builder setShowDarkenBackground(boolean showDarkenBackground) {
  384 + isShowDarkenBackground = showDarkenBackground;
  385 + return this;
  386 + }
  387 +
380 388 public Builder setLineVisible(int visible) {
381 389 lineVisible = visible;
382 390 return this;
383 391 }
384 392  
  393 + /**
  394 + * 设置左右边距
  395 + *
  396 + * @param margin
  397 + * @return
  398 + */
385 399 public Builder setLeftAndRightMargin(int margin) {
386 400 LEFT_TO_RIGHT_MARGIN = margin;
387 401 return this;
388 402 }
389 403  
390   - public Builder setHeightMargin(int margin) {
391   - HEIGHT_MARGIN = margin;
  404 + /**
  405 + * 设置上边距
  406 + *
  407 + * @param margin
  408 + * @return
  409 + */
  410 + public Builder setTopMargin(int margin) {
  411 + TOP_MARGIN = margin;
392 412 return this;
393 413 }
394 414  
... ... @@ -402,6 +422,18 @@ public final class PopMenu {
402 422 return this;
403 423 }
404 424  
  425 + /**
  426 + * 设置背景渐变色,一般在设置透明度的时候使用,因为半透明颜色时,箭头与下边recycleview会显得不是一个整体
  427 + * 纯色背景没事
  428 + *
  429 + * @param color
  430 + * @return
  431 + */
  432 + public Builder setBackgroundColorArray(@ColorInt int[] color) {
  433 + mBackgroundColorArray = color;
  434 + return this;
  435 + }
  436 +
405 437 public Builder setTextColor(int color) {
406 438 mTextColor = color;
407 439 return this;
... ... @@ -412,15 +444,17 @@ public final class PopMenu {
412 444 return this;
413 445 }
414 446  
  447 + /**
  448 + * 设置item点击效果
  449 + *
  450 + * @param drawable
  451 + * @return
  452 + */
415 453 public Builder setItemBackGround(int drawable) {
416 454 itemBackGround = drawable;
417 455 return this;
418 456 }
419 457  
420   - public Builder setShowImage(boolean isShowImage) {
421   - mIsShowImage = isShowImage;
422   - return this;
423   - }
424 458  
425 459 public Builder setCornerRadius(@DimenRes int resId) {
426 460 return setCornerRadius(mContext.getResources().getDimension(resId));
... ... @@ -431,6 +465,12 @@ public final class PopMenu {
431 465 return this;
432 466 }
433 467  
  468 + /**
  469 + * 设置箭头高度
  470 + *
  471 + * @param resId
  472 + * @return
  473 + */
434 474 public Builder setArrowHeight(@DimenRes int resId) {
435 475 return setArrowHeight(mContext.getResources().getDimension(resId));
436 476 }
... ... @@ -440,6 +480,12 @@ public final class PopMenu {
440 480 return this;
441 481 }
442 482  
  483 + /**
  484 + * 设置箭头宽度
  485 + *
  486 + * @param resId
  487 + * @return
  488 + */
443 489 public Builder setArrowWidth(@DimenRes int resId) {
444 490 return setArrowWidth(mContext.getResources().getDimension(resId));
445 491 }
... ...
module_xiaojiaSoundBox/src/main/java/com/cnlive/strike/xiaojiaspeaker/ui/adapter/PopMenuAdapter.java renamed to module_xiaojiaSoundBox/src/main/java/com/cnlive/strike/xiaojiaspeaker/ui/widget/popmenu/PopMenuAdapter.java
1   -package com.cnlive.strike.xiaojiaspeaker.ui.adapter;
  1 +package com.cnlive.strike.xiaojiaspeaker.ui.widget.popmenu;
2 2  
3 3 import android.content.Context;
4 4 import android.databinding.DataBindingUtil;
... ... @@ -10,10 +10,10 @@ import android.view.LayoutInflater;
10 10 import android.view.View;
11 11 import android.view.ViewGroup;
12 12  
  13 +import com.cnlive.strike.application.GlideApp;
13 14 import com.cnlive.strike.xiaojiaspeaker.R;
14   -import com.cnlive.strike.xiaojiaspeaker.databinding.ListItemWifi1Binding;
15 15 import com.cnlive.strike.xiaojiaspeaker.databinding.PopItemMenuBinding;
16   -import com.cnlive.strike.xiaojiaspeaker.model.PopMenuInfo;
  16 +import com.cnlive.strike.xiaojiaspeaker.ui.widget.popmenu.PopMenuInfo;
17 17  
18 18 import java.util.List;
19 19  
... ... @@ -72,10 +72,16 @@ public class PopMenuAdapter extends RecyclerView.Adapter {
72 72 }
73 73 }
74 74 //判断图标是否显示
75   - if (0 == popMenuInfoList.get(i).getImgDraw()) {
  75 + if (0 == popMenuInfoList.get(i).getImgDrawable() && TextUtils.isEmpty(popMenuInfoList.get(i).getNetImag())) {
76 76 binding.ivIcon.setVisibility(View.GONE);
77 77 } else {
78 78 binding.ivIcon.setVisibility(View.VISIBLE);
  79 + //优先显示网络图片
  80 + if (!TextUtils.isEmpty(popMenuInfoList.get(i).getNetImag())) {
  81 + GlideApp.with(context).load(popMenuInfoList.get(i).getNetImag()).placeholder(R.color.white_50).into(binding.ivIcon);
  82 + } else {
  83 + GlideApp.with(context).load(popMenuInfoList.get(i).getImgDrawable()).placeholder(R.color.white_50).into(binding.ivIcon);
  84 + }
79 85 }
80 86 //点击
81 87 }
... ...
module_xiaojiaSoundBox/src/main/java/com/cnlive/strike/xiaojiaspeaker/model/PopMenuInfo.java renamed to module_xiaojiaSoundBox/src/main/java/com/cnlive/strike/xiaojiaspeaker/ui/widget/popmenu/PopMenuInfo.java
1   -package com.cnlive.strike.xiaojiaspeaker.model;
  1 +package com.cnlive.strike.xiaojiaspeaker.ui.widget.popmenu;
2 2  
3 3 public class PopMenuInfo {
4 4 private String title;
5   - private int imgDraw;
  5 + private int imgDrawable;
  6 + private String netImag;
  7 +
  8 + public int getImgDrawable() {
  9 + return imgDrawable;
  10 + }
  11 +
  12 + public void setImgDrawable(int imgDrawable) {
  13 + this.imgDrawable = imgDrawable;
  14 + }
  15 +
  16 + public String getNetImag() {
  17 + return netImag;
  18 + }
  19 +
  20 + public void setNetImag(String netImag) {
  21 + this.netImag = netImag;
  22 + }
6 23  
7 24 public String getTitle() {
8 25 return title;
... ... @@ -12,11 +29,4 @@ public class PopMenuInfo {
12 29 this.title = title;
13 30 }
14 31  
15   - public int getImgDraw() {
16   - return imgDraw;
17   - }
18   -
19   - public void setImgDraw(int imgDraw) {
20   - this.imgDraw = imgDraw;
21   - }
22 32 }
... ...
module_xiaojiaSoundBox/src/main/res/anim/context_menu_enter.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<set xmlns:android="http://schemas.android.com/apk/res/android"
  3 + >
  4 +<!-- <alpha-->
  5 +<!-- android:duration="200"-->
  6 +<!-- android:fromAlpha="0.0"-->
  7 +<!-- android:toAlpha="1.0"/>-->
  8 +<!-- 什么都不做-->
  9 +<!-- <scale-->
  10 +<!-- android:duration="200"-->
  11 +<!-- android:fromXScale="0.0"-->
  12 +<!-- android:fromYScale="0.0"-->
  13 +<!-- android:interpolator="@android:anim/accelerate_interpolator"-->
  14 +<!-- android:pivotX="100%"-->
  15 +<!-- android:pivotY="0%"-->
  16 +<!-- android:toXScale="1"-->
  17 +<!-- android:toYScale="1"/>-->
  18 +</set>
0 19 \ No newline at end of file
... ...
module_xiaojiaSoundBox/src/main/res/anim/context_menu_exit.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<set xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <alpha
  4 + android:duration="300"
  5 + android:fromAlpha="1.0"
  6 + android:toAlpha="0.0" />
  7 + <!-- <scale-->
  8 + <!-- android:duration="200"-->
  9 + <!-- android:fromXScale="1.0"-->
  10 + <!-- android:fromYScale="1.0"-->
  11 + <!-- android:interpolator="@android:anim/accelerate_interpolator"-->
  12 + <!-- android:pivotX="100%"-->
  13 + <!-- android:pivotY="0%"-->
  14 + <!-- android:toXScale="1.0"-->
  15 + <!-- android:toYScale="0"/>-->
  16 +</set>
0 17 \ No newline at end of file
... ...
module_xiaojiaSoundBox/src/main/res/drawable-hdpi/icon_big_xiaojia.png 0 → 100644

22.8 KB

module_xiaojiaSoundBox/src/main/res/drawable-xhdpi/icon_big_xiaojia.png 0 → 100644

40 KB

module_xiaojiaSoundBox/src/main/res/drawable-xxhdpi/icon_big_xiaojia.png 0 → 100644

76 KB

module_xiaojiaSoundBox/src/main/res/drawable/shape_red_circle.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <corners android:radius="100dp" />
  4 + <solid android:color="#F10215" />
  5 +</shape>
0 6 \ No newline at end of file
... ...
module_xiaojiaSoundBox/src/main/res/layout/activity_firmware_update.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
  4 + xmlns:tools="http://schemas.android.com/tools"
  5 + android:layout_width="match_parent"
  6 + android:layout_height="match_parent"
  7 + tools:context=".ui.activity.FirmwareUpdateActivity">
  8 +
  9 +</android.support.constraint.ConstraintLayout>
0 10 \ No newline at end of file
... ...
module_xiaojiaSoundBox/src/main/res/layout/activity_search_device.xml
... ... @@ -6,6 +6,7 @@
6 6 android:layout_height="match_parent"
7 7 tools:context=".ui.activity.SearchDeviceActivity">
8 8  
  9 +
9 10 <RelativeLayout
10 11 android:id="@+id/fragment_container"
11 12 android:layout_width="match_parent"
... ...
module_xiaojiaSoundBox/src/main/res/layout/fragment_firmware_update.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<layout>
  3 +
  4 + <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  5 + android:layout_width="match_parent"
  6 + android:layout_height="match_parent"
  7 + android:background="@color/white"
  8 + android:orientation="vertical">
  9 +
  10 + <com.qmuiteam.qmui.widget.QMUITopBar
  11 + android:id="@+id/topbar"
  12 + android:layout_width="match_parent"
  13 + android:layout_height="?attr/qmui_topbar_height" />
  14 +
  15 + <LinearLayout
  16 + android:layout_width="match_parent"
  17 + android:layout_height="0dp"
  18 + android:layout_weight="2"
  19 + android:gravity="center"
  20 + android:orientation="vertical">
  21 +
  22 + <ImageView
  23 + android:layout_width="350dp"
  24 + android:layout_height="200dp"
  25 + android:layout_gravity="center_horizontal"
  26 + android:background="@drawable/icon_big_xiaojia"
  27 + android:scaleType="fitXY" />
  28 +
  29 + <LinearLayout
  30 + android:layout_width="wrap_content"
  31 + android:layout_height="wrap_content"
  32 + android:layout_marginTop="30dp">
  33 +
  34 + <TextView
  35 + android:layout_width="wrap_content"
  36 + android:layout_height="wrap_content"
  37 + android:text="当前版本v:"
  38 + android:textColor="@color/color_282828"
  39 + android:textSize="16sp" />
  40 +
  41 + <TextView
  42 + android:id="@+id/tv_current_version"
  43 + android:layout_width="wrap_content"
  44 + android:layout_height="wrap_content"
  45 + android:text="1.0.39.20190516"
  46 + android:textColor="@color/color_282828"
  47 + android:textSize="16sp" />
  48 + </LinearLayout>
  49 +
  50 + <LinearLayout
  51 + android:layout_width="wrap_content"
  52 + android:layout_height="wrap_content"
  53 + android:layout_marginTop="20dp">
  54 +
  55 + <TextView
  56 + android:layout_width="wrap_content"
  57 + android:layout_height="wrap_content"
  58 + android:text="最新版本v:"
  59 + android:textColor="@color/color_282828"
  60 + android:textSize="16sp" />
  61 +
  62 + <TextView
  63 + android:id="@+id/tv_new_version"
  64 + android:layout_width="wrap_content"
  65 + android:layout_height="wrap_content"
  66 + android:text="1.0.39.20190516"
  67 + android:textColor="@color/color_282828"
  68 + android:textSize="16sp" />
  69 + </LinearLayout>
  70 + </LinearLayout>
  71 +
  72 + <LinearLayout
  73 + android:layout_width="match_parent"
  74 + android:layout_height="0dp"
  75 + android:layout_weight="1"
  76 + android:gravity="center">
  77 +
  78 + <FrameLayout
  79 + android:layout_width="match_parent"
  80 + android:layout_height="wrap_content"
  81 + android:layout_marginLeft="20dp"
  82 + android:layout_marginRight="20dp">
  83 +
  84 + <Button
  85 + android:id="@+id/btn_check_update"
  86 + android:layout_width="match_parent"
  87 + android:layout_height="45dp"
  88 + android:background="@drawable/selector_btn_green"
  89 + android:gravity="center"
  90 + android:text="检查更新"
  91 + android:textColor="@color/white"
  92 + android:textSize="18sp"
  93 + android:textStyle="bold" />
  94 +
  95 + <View
  96 + android:layout_width="9dp"
  97 + android:layout_height="9dp"
  98 + android:layout_gravity="center"
  99 + android:layout_marginLeft="50dp"
  100 + android:layout_marginBottom="10dp"
  101 + android:background="@drawable/shape_red_circle" />
  102 + </FrameLayout>
  103 +
  104 + </LinearLayout>
  105 + </LinearLayout>
  106 +</layout>
0 107 \ No newline at end of file
... ...
module_xiaojiaSoundBox/src/main/res/layout/pop_item_menu.xml
... ... @@ -6,9 +6,9 @@
6 6 android:layout_width="wrap_content"
7 7 android:layout_height="wrap_content"
8 8 android:background="@drawable/selectable_pop_item_background"
  9 + android:clickable="true"
9 10 android:gravity="center_vertical"
10 11 android:minWidth="100dp"
11   - android:clickable="true"
12 12 android:orientation="vertical">
13 13  
14 14 <LinearLayout
... ... @@ -20,14 +20,16 @@
20 20 android:id="@+id/iv_icon"
21 21 android:layout_width="20dp"
22 22 android:layout_height="20dp"
23   - android:layout_marginLeft="10dp"
24   - android:background="@drawable/key_instruction" />
  23 + android:layout_marginLeft="10dp" />
25 24  
26 25 <TextView
27 26 android:id="@+id/tv_tip"
28 27 android:layout_width="wrap_content"
29 28 android:layout_height="wrap_content"
30 29 android:layout_marginLeft="10dp"
  30 + android:layout_marginTop="2dp"
  31 + android:layout_marginRight="10dp"
  32 + android:layout_marginBottom="2dp"
31 33 android:gravity="center_vertical"
32 34 android:minHeight="35dp"
33 35 android:textColor="@color/color_282828"
... ... @@ -37,7 +39,7 @@
37 39 <View
38 40 android:id="@+id/view_line"
39 41 android:layout_width="match_parent"
40   - android:layout_height="0.2dp"
  42 + android:layout_height="0.1dp"
41 43 android:background="@color/line" />
42 44  
43 45 </LinearLayout>
... ...
module_xiaojiaSoundBox/src/main/res/values/styles.xml
... ... @@ -27,4 +27,11 @@
27 27 <item name="kswThumbWidth">@dimen/ksw_md_thumb_ripple_size</item>
28 28 <item name="kswThumbHeight">@dimen/ksw_md_thumb_ripple_size</item>
29 29 </style>
  30 + <!--pop特效-->
  31 + <style name="contextMenuAnim" parent="@android:style/Animation.Activity">
  32 + <item name="android:windowEnterAnimation">@anim/context_menu_enter</item>
  33 + <!-- 指定显示时的动画xml -->
  34 + <item name="android:windowExitAnimation">@anim/context_menu_exit</item>
  35 + <!-- 指定消失时的动画xml -->
  36 + </style>
30 37 </resources>
... ...