{
39 |
40 | private Request request;
41 |
42 | private final int width;
43 | private final int height;
44 |
45 | protected ImageDownloadTarget() {
46 | this(SIZE_ORIGINAL, SIZE_ORIGINAL);
47 | }
48 |
49 | private ImageDownloadTarget(int width, int height) {
50 | this.width = width;
51 | this.height = height;
52 | }
53 |
54 | @Override
55 | public void onResourceReady(@NonNull File resource, Transition super File> transition) {
56 | }
57 |
58 | @Override
59 | public void onLoadCleared(Drawable placeholder) {
60 | }
61 |
62 | @Override
63 | public void onLoadStarted(Drawable placeholder) {
64 | }
65 |
66 | @Override
67 | public void onLoadFailed(Drawable errorDrawable) {
68 | }
69 |
70 | /**
71 | * Immediately calls the given callback with the sizes given in the constructor.
72 | *
73 | * @param cb {@inheritDoc}
74 | */
75 | @Override
76 | public final void getSize(@NonNull SizeReadyCallback cb) {
77 | if (!Util.isValidDimensions(width, height)) {
78 | throw new IllegalArgumentException(
79 | "Width and height must both be > 0 or Target#SIZE_ORIGINAL, but given" + " width: "
80 | + width + " and height: " + height + ", either provide dimensions in the constructor"
81 | + " or call override()");
82 | }
83 | cb.onSizeReady(width, height);
84 | }
85 |
86 | @Override
87 | public void removeCallback(@NonNull SizeReadyCallback cb) {
88 | // Do nothing, we never retain a reference to the callback.
89 | }
90 |
91 | @Override
92 | public void setRequest(@Nullable Request request) {
93 | this.request = request;
94 | }
95 |
96 | @Override
97 | @Nullable
98 | public Request getRequest() {
99 | return request;
100 | }
101 |
102 | @Override
103 | public void onStart() {
104 | // Do nothing.
105 | }
106 |
107 | @Override
108 | public void onStop() {
109 | // Do nothing.
110 | }
111 |
112 | @Override
113 | public void onDestroy() {
114 | // Do nothing.
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/library/src/main/java/com/lxj/xpopup/util/PermissionConstants.java:
--------------------------------------------------------------------------------
1 | package com.lxj.xpopup.util;
2 |
3 |
4 | import android.Manifest;
5 | import android.annotation.SuppressLint;
6 | import androidx.annotation.StringDef;
7 | import java.lang.annotation.Retention;
8 | import java.lang.annotation.RetentionPolicy;
9 |
10 | /**
11 | *
12 | * author: Blankj
13 | * blog : http://blankj.com
14 | * time : 2017/12/29
15 | * desc : constants of permission
16 | *
17 | */
18 | @SuppressLint("InlinedApi")
19 | public final class PermissionConstants {
20 |
21 | public static final String STORAGE = "STORAGE";
22 |
23 | private static final String[] GROUP_STORAGE = {
24 | Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,
25 | };
26 |
27 | @StringDef({STORAGE,})
28 | @Retention(RetentionPolicy.SOURCE)
29 | public @interface PermissionGroup {
30 | }
31 |
32 | public static String[] getPermissions(@PermissionGroup final String permission) {
33 | if (permission == null) return new String[0];
34 | switch (permission) {
35 | case STORAGE:
36 | return GROUP_STORAGE;
37 | }
38 | return new String[]{permission};
39 | }
40 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/lxj/xpopup/util/SSIVListener.java:
--------------------------------------------------------------------------------
1 | package com.lxj.xpopup.util;
2 |
3 | import android.graphics.Bitmap;
4 | import android.util.Log;
5 | import android.view.View;
6 | import android.widget.ProgressBar;
7 | import com.davemorrissey.labs.subscaleview.ImageSource;
8 | import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
9 |
10 | import java.io.File;
11 |
12 | public class SSIVListener implements SubsamplingScaleImageView.OnImageEventListener {
13 |
14 | private final SubsamplingScaleImageView ssiv;
15 | private final ProgressBar progressBar;
16 | private final File resource;
17 | private final int errorImage;
18 | private final boolean longImage;
19 | public SSIVListener(SubsamplingScaleImageView ssiv, ProgressBar progressBar, int errorImage, boolean longImage, File resource) {
20 | this.ssiv = ssiv;
21 | this.progressBar = progressBar;
22 | this.errorImage = errorImage;
23 | this.longImage = longImage;
24 | this.resource = resource;
25 | }
26 |
27 | @Override
28 | public void onReady() { }
29 |
30 | @Override
31 | public void onImageLoaded() {
32 | progressBar.setVisibility(View.INVISIBLE);
33 | if (longImage) {
34 | ssiv.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_START);
35 | } else {
36 | ssiv.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE);
37 | }
38 |
39 | }
40 | @Override
41 | public void onPreviewLoadError(Exception e) { }
42 |
43 | @Override
44 | public void onImageLoadError(Exception e) {
45 | // ssiv.animate().alpha(1f).setDuration(500).start();
46 | // e.printStackTrace();
47 | Bitmap bitmap = XPopupUtils.getBitmap(resource, ssiv.getMeasuredWidth(), ssiv.getMeasuredHeight());
48 | ssiv.setImage(bitmap==null ? ImageSource.resource(errorImage) : ImageSource.bitmap(bitmap));
49 | progressBar.setVisibility(View.INVISIBLE);
50 | }
51 |
52 | @Override
53 | public void onTileLoadError(Exception e) { }
54 |
55 | @Override
56 | public void onPreviewReleased() { }
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/library/src/main/java/com/lxj/xpopup/widget/BlankView.java:
--------------------------------------------------------------------------------
1 | package com.lxj.xpopup.widget;
2 |
3 | import android.content.Context;
4 | import android.graphics.Canvas;
5 | import android.graphics.Color;
6 | import android.graphics.Paint;
7 | import android.graphics.RectF;
8 | import android.util.AttributeSet;
9 | import android.view.View;
10 |
11 | /**
12 | * Description: 大图浏览弹窗显示后的占位View
13 | * Create by lxj, at 2019/2/2
14 | */
15 | public class BlankView extends View {
16 | public BlankView(Context context) {
17 | super(context);
18 | }
19 |
20 | public BlankView(Context context, AttributeSet attrs) {
21 | super(context, attrs);
22 | init();
23 | }
24 |
25 | public BlankView(Context context, AttributeSet attrs, int defStyleAttr) {
26 | super(context, attrs, defStyleAttr);
27 | init();
28 | }
29 |
30 | private Paint paint = new Paint();
31 | private RectF rect = null;
32 | public int radius = 0;
33 | public int color = Color.WHITE;
34 | public int strokeColor = Color.parseColor("#DDDDDD");
35 |
36 | private void init() {
37 | paint.setAntiAlias(true);
38 | paint.setStrokeWidth(1);
39 | }
40 |
41 | @Override
42 | protected void onSizeChanged(int w, int h, int oldw, int oldh) {
43 | super.onSizeChanged(w, h, oldw, oldh);
44 | rect = new RectF(0, 0, getMeasuredWidth(), getMeasuredHeight());
45 | }
46 |
47 | @Override
48 | protected void onDraw(Canvas canvas) {
49 | super.onDraw(canvas);
50 | paint.setColor(color);
51 | canvas.drawRoundRect(rect, radius, radius, paint);
52 |
53 | paint.setStyle(Paint.Style.STROKE);
54 | paint.setColor(strokeColor);
55 | canvas.drawRoundRect(rect, radius, radius, paint);
56 | paint.setStyle(Paint.Style.FILL);
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/library/src/main/java/com/lxj/xpopup/widget/CheckView.java:
--------------------------------------------------------------------------------
1 | package com.lxj.xpopup.widget;
2 |
3 | import android.content.Context;
4 | import android.graphics.Canvas;
5 | import android.graphics.Color;
6 | import android.graphics.Paint;
7 | import android.graphics.Path;
8 | import android.util.AttributeSet;
9 | import android.view.View;
10 |
11 | import com.lxj.xpopup.util.XPopupUtils;
12 |
13 | /**
14 | * Description: 对勾View
15 | * Create by dance, at 2018/12/21
16 | */
17 | public class CheckView extends View {
18 | Paint paint;
19 | int color = Color.TRANSPARENT;
20 | public CheckView(Context context) {
21 | this(context, null);
22 | }
23 |
24 | public CheckView(Context context, AttributeSet attrs) {
25 | this(context, attrs, 0);
26 | }
27 |
28 | public CheckView(Context context, AttributeSet attrs, int defStyleAttr) {
29 | super(context, attrs, defStyleAttr);
30 | paint = new Paint(Paint.ANTI_ALIAS_FLAG);
31 | paint.setStrokeWidth(XPopupUtils.dp2px(context, 2));
32 | paint.setStyle(Paint.Style.STROKE);
33 | }
34 |
35 | /**
36 | * 设置对勾View
37 | * @param color
38 | */
39 | public void setColor(int color){
40 | this.color = color;
41 | paint.setColor(color);
42 | postInvalidate();
43 | }
44 |
45 | Path path = new Path();
46 | @Override
47 | protected void onDraw(Canvas canvas) {
48 | super.onDraw(canvas);
49 | if(color==Color.TRANSPARENT)return;
50 | // first part
51 | path.moveTo(getMeasuredWidth()/4f, getMeasuredHeight()/2f);
52 | path.lineTo(getMeasuredWidth()/2f , getMeasuredHeight()*3/4f);
53 | // second part
54 | path.lineTo(getMeasuredWidth(), getMeasuredHeight()/4f);
55 | canvas.drawPath(path, paint);
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/library/src/main/java/com/lxj/xpopup/widget/HackyViewPager.java:
--------------------------------------------------------------------------------
1 | package com.lxj.xpopup.widget;
2 |
3 | import android.content.Context;
4 | import androidx.annotation.NonNull;
5 | import androidx.annotation.Nullable;
6 | import androidx.viewpager.widget.ViewPager;
7 | import android.util.AttributeSet;
8 | import android.view.MotionEvent;
9 |
10 | /**
11 | * see issues for PhotoView: https://github.com/chrisbanes/PhotoView
12 | */
13 | public class HackyViewPager extends ViewPager {
14 | public HackyViewPager(@NonNull Context context) {
15 | super(context);
16 | }
17 |
18 | public HackyViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {
19 | super(context, attrs);
20 | }
21 |
22 | @Override
23 | public boolean onInterceptTouchEvent(MotionEvent ev) {
24 | try {
25 | return super.onInterceptTouchEvent(ev);
26 | } catch (IllegalArgumentException e) {
27 | return false;
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/library/src/main/java/com/lxj/xpopup/widget/LoadingView.java:
--------------------------------------------------------------------------------
1 | package com.lxj.xpopup.widget;
2 |
3 | import android.animation.ArgbEvaluator;
4 | import android.content.Context;
5 | import android.graphics.Canvas;
6 | import android.graphics.Color;
7 | import android.graphics.Paint;
8 | import android.util.AttributeSet;
9 | import android.view.View;
10 | import com.lxj.xpopup.util.XPopupUtils;
11 |
12 | /**
13 | * Description: 加载View
14 | * Create by dance, at 2018/12/18
15 | */
16 | public class LoadingView extends View {
17 | private Paint paint;
18 | private float radius;
19 | private float radiusOffset;
20 | // 不是固定不变的,当width为30dp时,它为2dp,当宽度变大,这个也会相应的变大
21 | private float stokeWidth = 2f;
22 | private ArgbEvaluator argbEvaluator = new ArgbEvaluator();
23 | private int startColor = Color.parseColor("#EEEEEE");
24 | private int endColor = Color.parseColor("#111111");
25 | int lineCount = 10; // 线的数量
26 | float avgAngle = 360f / lineCount;
27 | int time = 0; // 重复次数
28 | float centerX, centerY; // 中心x,y
29 |
30 | public LoadingView(Context context) {
31 | this(context, null);
32 | }
33 |
34 | public LoadingView(Context context, AttributeSet attrs) {
35 | this(context, attrs, 0);
36 | }
37 |
38 | public LoadingView(Context context, AttributeSet attrs, int defStyleAttr) {
39 | super(context, attrs, defStyleAttr);
40 | paint = new Paint(Paint.ANTI_ALIAS_FLAG);
41 | stokeWidth = XPopupUtils.dp2px(context, stokeWidth);
42 | paint.setStrokeWidth(stokeWidth);
43 | }
44 |
45 | float startX, endX;
46 | @Override
47 | protected void onSizeChanged(int w, int h, int oldw, int oldh) {
48 | super.onSizeChanged(w, h, oldw, oldh);
49 | radius = getMeasuredWidth() / 2f;
50 | radiusOffset = radius / 2.5f;
51 |
52 | centerX = getMeasuredWidth() / 2f;
53 | centerY = getMeasuredHeight() / 2f;
54 |
55 | stokeWidth = XPopupUtils.dp2px(getContext(), 2);
56 | // stokeWidth *= getMeasuredWidth() * 1f / XPopupUtils.dp2px(getContext(), 40);
57 | paint.setStrokeWidth(stokeWidth);
58 | startX = centerX + radiusOffset;
59 | endX = startX + radius / 3f;
60 | }
61 |
62 | @Override
63 | protected void onDraw(final Canvas canvas) {
64 | super.onDraw(canvas);
65 | // 1 2 3 4 5
66 | // 2 3 4 5 1
67 | // 3 4 5 1 2
68 | // ...
69 | for (int i = lineCount - 1; i >= 0; i--) {
70 | int temp = Math.abs(i + time) % lineCount;
71 | float fraction = (temp + 1) * 1f / lineCount;
72 | int color = (int) argbEvaluator.evaluate(fraction, startColor, endColor);
73 | paint.setColor(color);
74 |
75 | canvas.drawLine(startX, centerY, endX, centerY, paint);
76 | // 线的两端画个点,看着圆滑
77 | canvas.drawCircle(startX, centerY, stokeWidth / 2, paint);
78 | canvas.drawCircle(endX, centerY, stokeWidth / 2, paint);
79 | canvas.rotate(avgAngle, centerX, centerY);
80 | }
81 | }
82 |
83 | public void start(){
84 | removeCallbacks(increaseTask);
85 | postDelayed(increaseTask, 80);
86 | }
87 |
88 | private Runnable increaseTask = new Runnable() {
89 | @Override
90 | public void run() {
91 | time++;
92 | postInvalidate(0,0,getMeasuredWidth(), getMeasuredHeight());
93 | postDelayed(increaseTask, 80);
94 | }
95 | };
96 |
97 | @Override
98 | protected void onAttachedToWindow() {
99 | super.onAttachedToWindow();
100 | start();
101 | }
102 |
103 | @Override
104 | protected void onDetachedFromWindow() {
105 | super.onDetachedFromWindow();
106 | removeCallbacks(increaseTask);
107 | }
108 |
109 | }
110 |
--------------------------------------------------------------------------------
/library/src/main/java/com/lxj/xpopup/widget/PartShadowContainer.java:
--------------------------------------------------------------------------------
1 | package com.lxj.xpopup.widget;
2 |
3 | import android.content.Context;
4 | import android.graphics.Rect;
5 | import androidx.annotation.NonNull;
6 | import androidx.annotation.Nullable;
7 | import android.util.AttributeSet;
8 | import android.view.MotionEvent;
9 | import android.view.View;
10 | import android.view.ViewConfiguration;
11 | import android.widget.FrameLayout;
12 |
13 | import com.lxj.xpopup.core.BasePopupView;
14 | import com.lxj.xpopup.interfaces.OnClickOutsideListener;
15 | import com.lxj.xpopup.util.XPopupUtils;
16 |
17 | import java.util.ArrayList;
18 |
19 | /**
20 | * Description:
21 | * Create by dance, at 2019/1/10
22 | */
23 | public class PartShadowContainer extends FrameLayout {
24 | public ArrayList notDismissArea;
25 | public BasePopupView popupView;
26 |
27 | public PartShadowContainer(@NonNull Context context) {
28 | super(context);
29 | }
30 |
31 | public PartShadowContainer(@NonNull Context context, @Nullable AttributeSet attrs) {
32 | this(context, attrs, 0);
33 | }
34 |
35 | public PartShadowContainer(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
36 | super(context, attrs, defStyleAttr);
37 | }
38 |
39 | private float x, y;
40 |
41 | @Override
42 | public boolean onTouchEvent(MotionEvent event) {
43 | // 计算implView的Rect
44 | View implView = getChildAt(0);
45 | int[] location = new int[2];
46 | implView.getLocationInWindow(location);
47 | Rect implViewRect = new Rect(location[0], location[1], location[0] + implView.getMeasuredWidth(),
48 | location[1] + implView.getMeasuredHeight());
49 | if (!XPopupUtils.isInRect(event.getRawX(), event.getRawY(), implViewRect)) {
50 | switch (event.getAction()) {
51 | case MotionEvent.ACTION_DOWN:
52 | x = event.getX();
53 | y = event.getY();
54 | //TODO: PartShadowContainer需要实现自己的isClickThrough和isTouchThrough
55 | // if(popupView!=null ){
56 | // popupView.passTouchThrough(event);
57 | // }
58 | break;
59 | case MotionEvent.ACTION_MOVE:
60 | // if(popupView!=null && popupView.popupInfo != null && popupView.popupInfo.isTouchThrough){
61 | // popupView.passTouchThrough(event);
62 | // }
63 | case MotionEvent.ACTION_UP:
64 | case MotionEvent.ACTION_CANCEL:
65 | float dx = event.getX() - x;
66 | float dy = event.getY() - y;
67 | float distance = (float) Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
68 | if (distance < ViewConfiguration.get(getContext()).getScaledTouchSlop()) {
69 | if (notDismissArea != null && !notDismissArea.isEmpty()) {
70 | boolean inRect = false;
71 | for (Rect r : notDismissArea) {
72 | if (XPopupUtils.isInRect(event.getRawX(), event.getRawY(), r)) {
73 | inRect = true;
74 | break;
75 | }
76 | }
77 | if (!inRect && listener != null) {
78 | listener.onClickOutside();
79 | }
80 | } else {
81 | if (listener != null) listener.onClickOutside();
82 | }
83 | }
84 | x = 0;
85 | y = 0;
86 | break;
87 | }
88 | }
89 | return true;
90 | }
91 |
92 | private OnClickOutsideListener listener;
93 |
94 | public void setOnClickOutsideListener(OnClickOutsideListener listener) {
95 | this.listener = listener;
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/library/src/main/java/com/lxj/xpopup/widget/VerticalRecyclerView.java:
--------------------------------------------------------------------------------
1 | package com.lxj.xpopup.widget;
2 |
3 | import android.content.Context;
4 | import android.graphics.drawable.GradientDrawable;
5 | import android.util.AttributeSet;
6 | import androidx.annotation.NonNull;
7 | import androidx.annotation.Nullable;
8 | import androidx.recyclerview.widget.LinearLayoutManager;
9 | import androidx.recyclerview.widget.RecyclerView;
10 | import com.lxj.xpopup.R;
11 | import com.lxj.xpopup.util.XPopupUtils;
12 |
13 | /**
14 | * Description:
15 | * Create by dance, at 2018/12/12
16 | */
17 | public class VerticalRecyclerView extends RecyclerView {
18 | public VerticalRecyclerView(@NonNull Context context) {
19 | this(context, null);
20 | }
21 |
22 | public VerticalRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {
23 | this(context, attrs, 0);
24 | }
25 |
26 | public VerticalRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) {
27 | super(context, attrs, defStyle);
28 | setLayoutManager(new LinearLayoutManager(getContext()));
29 | }
30 |
31 | public void setupDivider(Boolean isDark){
32 | SmartDivider decoration = new SmartDivider(getContext(), SmartDivider.VERTICAL);
33 | GradientDrawable drawable = new GradientDrawable();
34 | drawable.setShape(GradientDrawable.RECTANGLE);
35 | drawable.setColor(getResources().getColor(isDark ? R.color._xpopup_list_dark_divider : R.color._xpopup_list_divider));
36 | drawable.setSize(10, XPopupUtils.dp2px(getContext(), .5f));
37 | decoration.setDrawable(drawable);
38 | addItemDecoration(decoration);
39 | }
40 |
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_adapter_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
17 |
22 |
23 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_adapter_text_match.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
16 |
21 |
22 |
31 |
32 |
37 |
38 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_attach_impl_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_attach_popup_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_bottom_impl_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
21 |
22 |
23 |
24 |
33 |
34 |
39 |
49 |
50 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_bottom_popup_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_bubble_attach_popup_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_center_impl_confirm.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
19 |
20 |
25 |
31 |
32 |
43 |
44 |
55 |
56 |
57 |
58 |
59 |
64 |
69 |
81 |
82 |
87 |
88 |
99 |
100 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_center_impl_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
21 |
22 |
23 |
24 |
32 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_center_impl_loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
15 |
16 |
20 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_center_popup_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_divider.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_drawer_popup_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
15 |
16 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_fullscreen_popup_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_image_viewer_popup_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
17 |
18 |
22 |
23 |
24 |
25 |
34 |
35 |
46 |
47 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_partshadow_popup_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/_xpopup_position_popup_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/library/src/main/res/values-zh/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 取消
4 | 确定
5 | 保存
6 | 已保存到相册
7 | 图片不存在
8 | 图片保存失败
9 |
10 |
--------------------------------------------------------------------------------
/library/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #EEEEEE
4 | #444444
5 | #333333
6 | #f1f1f1
7 | #232323
8 | #FFFFFF
9 | #444444
10 |
--------------------------------------------------------------------------------
/library/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Cancel
4 | OK
5 | save
6 | Saved to album
7 | Image not exist
8 | Image save failed
9 |
--------------------------------------------------------------------------------
/library/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/reward-list.md:
--------------------------------------------------------------------------------
1 | ## 打赏名单
2 |
3 | 非常感谢下面这些朋友的热心支持,开源不易,这给我更大的动力去维护这个项目。
4 |
5 | | 名字 | Github地址 |
6 | | ------ | ---------- |
7 | | Alfred | 无 |
8 | | LOPER7 | https://github.com/loperSeven |
9 | | | |
10 | | | |
11 |
12 |
--------------------------------------------------------------------------------
/screenshot/animators.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/animators.gif
--------------------------------------------------------------------------------
/screenshot/attach1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/attach1.gif
--------------------------------------------------------------------------------
/screenshot/attach2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/attach2.gif
--------------------------------------------------------------------------------
/screenshot/background.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/background.gif
--------------------------------------------------------------------------------
/screenshot/bottom1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/bottom1.gif
--------------------------------------------------------------------------------
/screenshot/bottom2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/bottom2.gif
--------------------------------------------------------------------------------
/screenshot/bubble.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/bubble.gif
--------------------------------------------------------------------------------
/screenshot/custom.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/custom.gif
--------------------------------------------------------------------------------
/screenshot/douyin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/douyin.png
--------------------------------------------------------------------------------
/screenshot/download.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/download.png
--------------------------------------------------------------------------------
/screenshot/drawer.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/drawer.gif
--------------------------------------------------------------------------------
/screenshot/full.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/full.gif
--------------------------------------------------------------------------------
/screenshot/imageviewer1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/imageviewer1.gif
--------------------------------------------------------------------------------
/screenshot/imageviewer2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/imageviewer2.gif
--------------------------------------------------------------------------------
/screenshot/imageviewer3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/imageviewer3.gif
--------------------------------------------------------------------------------
/screenshot/imageviewer4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/imageviewer4.gif
--------------------------------------------------------------------------------
/screenshot/input.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/input.gif
--------------------------------------------------------------------------------
/screenshot/inset1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/inset1.gif
--------------------------------------------------------------------------------
/screenshot/inset2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/inset2.gif
--------------------------------------------------------------------------------
/screenshot/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/logo.png
--------------------------------------------------------------------------------
/screenshot/partshadow1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/partshadow1.gif
--------------------------------------------------------------------------------
/screenshot/partshadow2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/partshadow2.gif
--------------------------------------------------------------------------------
/screenshot/pay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/pay.png
--------------------------------------------------------------------------------
/screenshot/position.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/position.gif
--------------------------------------------------------------------------------
/screenshot/search.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/junixapp/XPopup/fd1b8b7739596680a90e56efaa01ed524d4d95a1/screenshot/search.gif
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':library'
2 |
--------------------------------------------------------------------------------