Skip to content

Commit 7b426e5

Browse files
committed
修复无items时崩溃
1 parent 12fefff commit 7b426e5

File tree

8 files changed

+134
-44
lines changed

8 files changed

+134
-44
lines changed

app/src/main/java/com/mylhyl/circledialog/sample/MainActivity.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import com.chad.library.adapter.base.BaseSectionQuickAdapter;
2626
import com.chad.library.adapter.base.BaseViewHolder;
2727
import com.mylhyl.circledialog.CircleDialog;
28+
import com.mylhyl.circledialog.callback.ConfigItems;
29+
import com.mylhyl.circledialog.params.ItemsParams;
2830
import com.mylhyl.circledialog.params.ProgressParams;
2931
import com.mylhyl.circledialog.res.drawable.CircleDrawable;
3032
import com.mylhyl.circledialog.res.values.CircleColor;
@@ -406,13 +408,21 @@ protected void convert(BaseViewHolder helper, MySectionEntity item) {
406408
});
407409
break;
408410
case 14:
409-
final String[] objectsR = {"item0", "item1", "item2", "item3"};
411+
final String[] objectsR = {"item0", "item1", "item2", "item3", "item4", "item5"
412+
, "item6", "item7", "item8", "item9", "item10"};
410413
final CheckedAdapter checkedAdapterR = new CheckedAdapter(this, objectsR, true);
411414

412415
new CircleDialog.Builder()
416+
.setMaxHeight(0.7f)
413417
.configDialog(params -> params.backgroundColorPress = Color.CYAN)
414418
.setTitle("带复选的ListView")
415419
.setSubTitle("单选")
420+
.configItems(new ConfigItems() {
421+
@Override
422+
public void onConfig(ItemsParams params) {
423+
params.bottomMargin = 100;
424+
}
425+
})
416426
.setItems(checkedAdapterR, (parent, view15, position15, id) ->
417427
checkedAdapterR.toggle(position15, objectsR[position15]))
418428
.setItemsManualClose(true)

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ buildscript {
77
google()
88
}
99
dependencies {
10-
classpath 'com.android.tools.build:gradle:3.1.2'
10+
classpath 'com.android.tools.build:gradle:3.1.4'
1111

1212
// NOTE: Do not place your application dependencies here; they belong
1313
// in the individual module build.gradle files

circledialog/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ dependencies {
2828
compileOnly rootProject.ext.dependencies.appcompatV7
2929
compileOnly rootProject.ext.dependencies.recyclerview
3030
compileOnly rootProject.ext.dependencies.lottie
31+
compileOnly rootProject.ext.dependencies.cardview
3132
}
3233

3334
publish {

circledialog/src/main/java/com/mylhyl/circledialog/AbsCircleDialog.java

+8-10
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import android.view.LayoutInflater;
99
import android.view.View;
1010
import android.view.ViewGroup;
11-
import android.view.WindowManager;
1211
import android.widget.EditText;
1312

1413
import com.mylhyl.circledialog.params.DialogParams;
@@ -34,6 +33,14 @@ public static AbsCircleDialog newAbsCircleDialog(CircleParams params) {
3433
return circleDialog;
3534
}
3635

36+
@Override
37+
public View createView(Context context, LayoutInflater inflater, ViewGroup container) {
38+
mController = new Controller(getContext().getApplicationContext(), mParams, this);
39+
mController.createView();
40+
View view = mController.getView();
41+
return view;
42+
}
43+
3744
@Override
3845
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
3946
super.onViewCreated(view, savedInstanceState);
@@ -44,14 +51,6 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
4451
}
4552
}
4653

47-
@Override
48-
public View createView(Context context, LayoutInflater inflater, ViewGroup container) {
49-
mController = new Controller(getContext().getApplicationContext(), mParams, this);
50-
mController.createView();
51-
View view = mController.getView();
52-
return view;
53-
}
54-
5554
@Override
5655
public void onCreate(@Nullable Bundle savedInstanceState) {
5756
super.onCreate(savedInstanceState);
@@ -69,7 +68,6 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
6968
setPadding(mPadding[0], mPadding[1], mPadding[2], mPadding[3]);
7069
setAnimations(dialogParams.animStyle);
7170
setDimEnabled(dialogParams.isDimEnabled);
72-
//setBackgroundColor(dialogParams.backgroundColor);
7371
setRadius(dialogParams.radius);
7472
setAlpha(dialogParams.alpha);
7573
setX(dialogParams.xOff);

circledialog/src/main/java/com/mylhyl/circledialog/BaseCircleDialog.java

+30-31
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ public BaseCircleDialog() {
6666
}
6767

6868
@Override
69-
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
70-
savedInstanceState) {
69+
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
7170
View view = createView(getContext(), inflater, container);
7271
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
7372
view.setBackground(new CircleDrawable(mBackgroundColor, mRadius));
@@ -78,20 +77,22 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
7877
return view;
7978
}
8079

80+
public abstract View createView(Context context, LayoutInflater inflater, ViewGroup container);
81+
8182
@Override
8283
public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) {
8384
super.onViewCreated(view, savedInstanceState);
8485
if (mMaxHeight > 0) {
8586
mOnLayoutChangeListener = new View.OnLayoutChangeListener() {
8687
@Override
87-
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
88+
public void onLayoutChange(View v, int left, int top, int right, int bottom
89+
, int oldLeft, int oldTop, int oldRight, int oldBottom) {
8890
int height = v.getHeight();
8991
DisplayMetrics dm = getDisplayMetrics();
9092
int maxHeight = (int) (dm.heightPixels * mMaxHeight);
9193
if (height > maxHeight) {
9294
view.setLayoutParams(new FrameLayout.LayoutParams(
93-
FrameLayout.LayoutParams.MATCH_PARENT
94-
, maxHeight));
95+
FrameLayout.LayoutParams.MATCH_PARENT, maxHeight));
9596
}
9697
}
9798
};
@@ -107,8 +108,6 @@ private DisplayMetrics getDisplayMetrics() {
107108
return dm;
108109
}
109110

110-
public abstract View createView(Context context, LayoutInflater inflater, ViewGroup container);
111-
112111
@Override
113112
public void show(FragmentManager manager, String tag) {
114113
FragmentTransaction transaction = manager.beginTransaction();
@@ -152,6 +151,14 @@ public void onDismiss(DialogInterface dialog) {
152151
remove();
153152
}
154153

154+
public void remove() {
155+
FragmentManager fragmentManager = getFragmentManager();
156+
if (fragmentManager == null) return;
157+
FragmentTransaction ft = fragmentManager.beginTransaction();
158+
ft.remove(this);
159+
ft.addToBackStack(null);
160+
}
161+
155162
@Override
156163
public void onStart() {
157164
Dialog dialog = getDialog();
@@ -163,24 +170,6 @@ public void onStart() {
163170
super.onStart();
164171
}
165172

166-
@Override
167-
public void onSaveInstanceState(Bundle outState) {
168-
super.onSaveInstanceState(outState);
169-
outState.putInt(SAVED_GRAVITY, mGravity);
170-
outState.putBoolean(SAVED_TOUCH_OUT, mCanceledOnTouchOutside);
171-
outState.putBoolean(SAVED_CANCELED_BACK, mCanceledBack);
172-
outState.putFloat(SAVED_WIDTH, mWidth);
173-
outState.putFloat(SAVED_HEIGHT_MAX, mMaxHeight);
174-
if (mPadding != null) outState.putIntArray(SAVED_PADDING, mPadding);
175-
outState.putInt(SAVED_ANIM_STYLE, mAnimStyle);
176-
outState.putBoolean(SAVED_DIM_ENABLED, isDimEnabled);
177-
outState.putInt(SAVED_BACKGROUND_COLOR, mBackgroundColor);
178-
outState.putInt(SAVED_RADIUS, mRadius);
179-
outState.putFloat(SAVED_ALPHA, mAlpha);
180-
outState.putInt(SAVED_X, mX);
181-
outState.putInt(SAVED_Y, mY);
182-
}
183-
184173
/**
185174
* 对话框配置
186175
*
@@ -211,12 +200,22 @@ private void setDialogGravity(Dialog dialog) {
211200
window.setAttributes(wlp);
212201
}
213202

214-
public void remove() {
215-
FragmentManager fragmentManager = getFragmentManager();
216-
if (fragmentManager == null) return;
217-
FragmentTransaction ft = fragmentManager.beginTransaction();
218-
ft.remove(this);
219-
ft.addToBackStack(null);
203+
@Override
204+
public void onSaveInstanceState(Bundle outState) {
205+
super.onSaveInstanceState(outState);
206+
outState.putInt(SAVED_GRAVITY, mGravity);
207+
outState.putBoolean(SAVED_TOUCH_OUT, mCanceledOnTouchOutside);
208+
outState.putBoolean(SAVED_CANCELED_BACK, mCanceledBack);
209+
outState.putFloat(SAVED_WIDTH, mWidth);
210+
outState.putFloat(SAVED_HEIGHT_MAX, mMaxHeight);
211+
if (mPadding != null) outState.putIntArray(SAVED_PADDING, mPadding);
212+
outState.putInt(SAVED_ANIM_STYLE, mAnimStyle);
213+
outState.putBoolean(SAVED_DIM_ENABLED, isDimEnabled);
214+
outState.putInt(SAVED_BACKGROUND_COLOR, mBackgroundColor);
215+
outState.putInt(SAVED_RADIUS, mRadius);
216+
outState.putFloat(SAVED_ALPHA, mAlpha);
217+
outState.putInt(SAVED_X, mX);
218+
outState.putInt(SAVED_Y, mY);
220219
}
221220

222221
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.mylhyl.circledialog.res.drawable;
2+
3+
import android.graphics.Canvas;
4+
import android.graphics.ColorFilter;
5+
import android.graphics.Paint;
6+
import android.graphics.Path;
7+
import android.graphics.PixelFormat;
8+
import android.graphics.Rect;
9+
import android.graphics.drawable.Drawable;
10+
import android.support.annotation.NonNull;
11+
import android.support.annotation.Nullable;
12+
import android.view.Gravity;
13+
14+
/**
15+
* Created by hupei on 2018/8/3 8:58.
16+
*/
17+
public class TriangleArrowDrawable extends Drawable {
18+
19+
private final int arrowDirection;
20+
private final int bgColor;
21+
22+
public TriangleArrowDrawable(int arrowDirection, int bgColor) {
23+
this.arrowDirection = arrowDirection;
24+
this.bgColor = bgColor;
25+
}
26+
27+
@Override
28+
public void draw(@NonNull Canvas canvas) {
29+
Paint paint = new Paint();
30+
paint.setAntiAlias(true);
31+
paint.setColor(bgColor);
32+
paint.setStyle(Paint.Style.FILL);
33+
Path path = createPath();
34+
canvas.drawPath(path, paint);
35+
}
36+
37+
private Path createPath() {
38+
Rect bound = getBounds();
39+
Path path = new Path();
40+
if (arrowDirection == Gravity.TOP) {
41+
path.moveTo(bound.right / 2, bound.bottom / 2);
42+
path.lineTo(0, bound.bottom);
43+
path.lineTo(bound.right, bound.bottom);
44+
path.close();
45+
} else if (arrowDirection == Gravity.BOTTOM) {
46+
path.moveTo(bound.right / 2, bound.bottom / 2);
47+
path.lineTo(0, 0);
48+
path.lineTo(bound.right, 0);
49+
path.close();
50+
51+
} else if (arrowDirection == Gravity.LEFT) {
52+
path.moveTo(bound.right / 2, bound.bottom / 2);
53+
path.lineTo(bound.right, 0);
54+
path.lineTo(bound.right, bound.bottom);
55+
path.close();
56+
} else if (arrowDirection == Gravity.RIGHT) {
57+
path.moveTo(bound.right / 2, bound.bottom / 2);
58+
path.lineTo(0, 0);
59+
path.lineTo(0, bound.bottom);
60+
path.close();
61+
}
62+
return path;
63+
64+
}
65+
66+
@Override
67+
public void setAlpha(int alpha) {
68+
69+
}
70+
71+
@Override
72+
public void setColorFilter(@Nullable ColorFilter colorFilter) {
73+
74+
}
75+
76+
@Override
77+
public int getOpacity() {
78+
return PixelFormat.UNKNOWN;
79+
}
80+
}

circledialog/src/main/java/com/mylhyl/circledialog/view/BuildViewImpl.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,9 @@ public ItemsView buildItems() {
8585
else if (mParams.rvItemListener != null || mParams.itemsParams.adapterRv != null)
8686
mItemsView = new BodyItemsRvView(mContext, mParams);
8787

88-
mRoot.addView(mItemsView.getView());
8988
}
89+
if (mItemsView != null)
90+
mRoot.addView(mItemsView.getView());
9091
return mItemsView;
9192
}
9293

config.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ ext {
1515
// support
1616
appcompatV7 : "com.android.support:appcompat-v7:${dependVersion.support}",
1717
recyclerview : "com.android.support:recyclerview-v7:${dependVersion.support}",
18+
cardview : "com.android.support:cardview-v7:${dependVersion.support}",
1819
leakcanary : "com.squareup.leakcanary:leakcanary-android:1.5.4",
1920
lottie : "com.airbnb.android:lottie:2.5.4",
2021
baseRvAdapter: "com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.40"

0 commit comments

Comments
 (0)