From d13cfc04ed304b47c09a7f78cd3a1a8728f619dd Mon Sep 17 00:00:00 2001 From: leipeng Date: Mon, 10 Jul 2017 17:07:38 +0800 Subject: [PATCH 1/3] upodate load dialog --- .../.idea/libraries/Toasty_1_1_4.xml | 4 +- .../animated_vector_drawable_25_3_1.xml | 6 +- .../.idea/libraries/appcompat_v7_25_3_1.xml | 6 +- .../.idea/libraries/design_25_3_1.xml | 6 +- .../.idea/libraries/fragmentation_0_10_1.xml | 6 +- ViewComponent/.idea/libraries/library_1_4.xml | 6 +- ViewComponent/.idea/libraries/logger_1_3.xml | 6 +- .../libraries/recyclerview_v7_25_3_1.xml | 6 +- .../libraries/support_annotations_25_3_1.xml | 4 +- .../.idea/libraries/support_compat_25_3_1.xml | 6 +- .../libraries/support_core_ui_25_3_1.xml | 6 +- .../libraries/support_core_utils_25_3_1.xml | 6 +- .../libraries/support_fragment_25_3_1.xml | 6 +- .../libraries/support_media_compat_25_3_1.xml | 6 +- .../.idea/libraries/support_v4_25_3_1.xml | 4 +- .../support_vector_drawable_25_3_1.xml | 6 +- .../.idea/libraries/transition_25_3_1.xml | 6 +- ViewComponent/.idea/misc.xml | 2 +- .../com/czcg/viewcomponent/MainActivity.java | 5 +- .../java/com/czcg/viewlib/ui/Indicator.java | 205 ++++++++ .../java/com/czcg/viewlib/ui/LoadingView.java | 448 ++++++++++++++++++ .../BallClipRotateMultipleIndicator.java | 96 ++++ .../ui/indicators/BallGridPulseIndicator.java | 108 +++++ .../ui/indicators/BallPulseIndicator.java | 60 +++ .../com/czcg/viewlib/widget/DialogWidget.java | 81 +--- .../viewlib/widget/LoadDialogFragment.java | 69 +++ .../viewlib/src/main/res/layout/view_load.xml | 16 + .../viewlib/src/main/res/values/attrs.xml | 13 + .../viewlib/src/main/res/values/styles.xml | 25 + 29 files changed, 1111 insertions(+), 113 deletions(-) create mode 100644 ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/Indicator.java create mode 100644 ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/LoadingView.java create mode 100644 ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/indicators/BallClipRotateMultipleIndicator.java create mode 100644 ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/indicators/BallGridPulseIndicator.java create mode 100644 ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/indicators/BallPulseIndicator.java create mode 100644 ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/LoadDialogFragment.java create mode 100644 ViewComponent/viewlib/src/main/res/layout/view_load.xml create mode 100644 ViewComponent/viewlib/src/main/res/values/attrs.xml diff --git a/ViewComponent/.idea/libraries/Toasty_1_1_4.xml b/ViewComponent/.idea/libraries/Toasty_1_1_4.xml index 09b6394..0dcfbc9 100644 --- a/ViewComponent/.idea/libraries/Toasty_1_1_4.xml +++ b/ViewComponent/.idea/libraries/Toasty_1_1_4.xml @@ -1,8 +1,8 @@ - - + + diff --git a/ViewComponent/.idea/libraries/animated_vector_drawable_25_3_1.xml b/ViewComponent/.idea/libraries/animated_vector_drawable_25_3_1.xml index cf00045..98dfa2f 100644 --- a/ViewComponent/.idea/libraries/animated_vector_drawable_25_3_1.xml +++ b/ViewComponent/.idea/libraries/animated_vector_drawable_25_3_1.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/appcompat_v7_25_3_1.xml b/ViewComponent/.idea/libraries/appcompat_v7_25_3_1.xml index c9c2bfc..ffe61c4 100644 --- a/ViewComponent/.idea/libraries/appcompat_v7_25_3_1.xml +++ b/ViewComponent/.idea/libraries/appcompat_v7_25_3_1.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/design_25_3_1.xml b/ViewComponent/.idea/libraries/design_25_3_1.xml index 594b3e4..2d90bcc 100644 --- a/ViewComponent/.idea/libraries/design_25_3_1.xml +++ b/ViewComponent/.idea/libraries/design_25_3_1.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/fragmentation_0_10_1.xml b/ViewComponent/.idea/libraries/fragmentation_0_10_1.xml index d1f1065..6658188 100644 --- a/ViewComponent/.idea/libraries/fragmentation_0_10_1.xml +++ b/ViewComponent/.idea/libraries/fragmentation_0_10_1.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/library_1_4.xml b/ViewComponent/.idea/libraries/library_1_4.xml index f4fd83d..bf02ced 100644 --- a/ViewComponent/.idea/libraries/library_1_4.xml +++ b/ViewComponent/.idea/libraries/library_1_4.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/logger_1_3.xml b/ViewComponent/.idea/libraries/logger_1_3.xml index 251c39f..1ba5930 100644 --- a/ViewComponent/.idea/libraries/logger_1_3.xml +++ b/ViewComponent/.idea/libraries/logger_1_3.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/recyclerview_v7_25_3_1.xml b/ViewComponent/.idea/libraries/recyclerview_v7_25_3_1.xml index e4fe04e..a0799c7 100644 --- a/ViewComponent/.idea/libraries/recyclerview_v7_25_3_1.xml +++ b/ViewComponent/.idea/libraries/recyclerview_v7_25_3_1.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/support_annotations_25_3_1.xml b/ViewComponent/.idea/libraries/support_annotations_25_3_1.xml index 9c84cef..aa04c6c 100644 --- a/ViewComponent/.idea/libraries/support_annotations_25_3_1.xml +++ b/ViewComponent/.idea/libraries/support_annotations_25_3_1.xml @@ -1,11 +1,11 @@ - + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/support_compat_25_3_1.xml b/ViewComponent/.idea/libraries/support_compat_25_3_1.xml index 88c52ea..9636179 100644 --- a/ViewComponent/.idea/libraries/support_compat_25_3_1.xml +++ b/ViewComponent/.idea/libraries/support_compat_25_3_1.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/support_core_ui_25_3_1.xml b/ViewComponent/.idea/libraries/support_core_ui_25_3_1.xml index 5caae1f..e8694c3 100644 --- a/ViewComponent/.idea/libraries/support_core_ui_25_3_1.xml +++ b/ViewComponent/.idea/libraries/support_core_ui_25_3_1.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/support_core_utils_25_3_1.xml b/ViewComponent/.idea/libraries/support_core_utils_25_3_1.xml index 1ec5d69..6a00010 100644 --- a/ViewComponent/.idea/libraries/support_core_utils_25_3_1.xml +++ b/ViewComponent/.idea/libraries/support_core_utils_25_3_1.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/support_fragment_25_3_1.xml b/ViewComponent/.idea/libraries/support_fragment_25_3_1.xml index d0535be..647ed20 100644 --- a/ViewComponent/.idea/libraries/support_fragment_25_3_1.xml +++ b/ViewComponent/.idea/libraries/support_fragment_25_3_1.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/support_media_compat_25_3_1.xml b/ViewComponent/.idea/libraries/support_media_compat_25_3_1.xml index 76f7899..56b35e7 100644 --- a/ViewComponent/.idea/libraries/support_media_compat_25_3_1.xml +++ b/ViewComponent/.idea/libraries/support_media_compat_25_3_1.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/support_v4_25_3_1.xml b/ViewComponent/.idea/libraries/support_v4_25_3_1.xml index 1a0471f..b47281b 100644 --- a/ViewComponent/.idea/libraries/support_v4_25_3_1.xml +++ b/ViewComponent/.idea/libraries/support_v4_25_3_1.xml @@ -1,8 +1,8 @@ - - + + diff --git a/ViewComponent/.idea/libraries/support_vector_drawable_25_3_1.xml b/ViewComponent/.idea/libraries/support_vector_drawable_25_3_1.xml index c5a8e9c..3b06d10 100644 --- a/ViewComponent/.idea/libraries/support_vector_drawable_25_3_1.xml +++ b/ViewComponent/.idea/libraries/support_vector_drawable_25_3_1.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/libraries/transition_25_3_1.xml b/ViewComponent/.idea/libraries/transition_25_3_1.xml index 914099d..39340b9 100644 --- a/ViewComponent/.idea/libraries/transition_25_3_1.xml +++ b/ViewComponent/.idea/libraries/transition_25_3_1.xml @@ -1,12 +1,12 @@ - - + + - + \ No newline at end of file diff --git a/ViewComponent/.idea/misc.xml b/ViewComponent/.idea/misc.xml index 7863390..5d19981 100644 --- a/ViewComponent/.idea/misc.xml +++ b/ViewComponent/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/ViewComponent/app/src/main/java/com/czcg/viewcomponent/MainActivity.java b/ViewComponent/app/src/main/java/com/czcg/viewcomponent/MainActivity.java index 152a3c9..4a1c081 100644 --- a/ViewComponent/app/src/main/java/com/czcg/viewcomponent/MainActivity.java +++ b/ViewComponent/app/src/main/java/com/czcg/viewcomponent/MainActivity.java @@ -25,6 +25,9 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = this; setContentView(R.layout.activity_main); + + + DialogWidget.getInstance().show(this); } @Override @@ -37,7 +40,7 @@ public void onClick(View v) { ToastWidget.getInstance().createToast(context, "给我提示", ToastWidget.STATUS_SUCCESS).show(); break; case R.id.bt_3: - DialogWidget.getInstance().createLoadingDialog(context, true).show(); + DialogWidget.getInstance().show(this); break; case R.id.bt_4: SheetBean bean = new SheetBean(); diff --git a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/Indicator.java b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/Indicator.java new file mode 100644 index 0000000..4298159 --- /dev/null +++ b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/Indicator.java @@ -0,0 +1,205 @@ +package com.czcg.viewlib.ui; + +import android.animation.ValueAnimator; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.graphics.drawable.Animatable; +import android.graphics.drawable.Drawable; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * Created by leipe on 2017/7/6. + */ + +public abstract class Indicator extends Drawable implements Animatable { + + private HashMap mUpdateListeners = new HashMap<>(); + private ArrayList mAnimators; + private int alpha = 255; + private static final Rect ZERO_BOUNDS_RECT = new Rect(); + private Rect drawBounds = ZERO_BOUNDS_RECT; + + private boolean mHasAnimators; + private Paint mPaint = new Paint(); + + public Indicator() { + mPaint.setColor(Color.WHITE); + mPaint.setStyle(Paint.Style.FILL); + mPaint.setAntiAlias(true); + } + + // region 设置 Color Alpha + public int getColor() { + return mPaint.getColor(); + } + + public void setColor(int color) { + mPaint.setColor(color); + } + + @Override + public void setAlpha(int alpha) { + this.alpha = alpha; + } + + @Override + public int getAlpha() { + return alpha; + } + + @Override + public int getOpacity() { + return PixelFormat.OPAQUE; + } + + public void setDrawBounds(Rect drawBounds) { + setDrawBounds(drawBounds.left, drawBounds.top, drawBounds.right, drawBounds.bottom); + } + public void setDrawBounds(int left, int top, int right, int bottom) { + this.drawBounds = new Rect(left, top, right, bottom); + } + + public void addUpdateListener(ValueAnimator animator, ValueAnimator.AnimatorUpdateListener updateListener){ + mUpdateListeners.put(animator,updateListener); + } + + // endregion + + @Override + public void start() { + ensureAnimator(); + if (mAnimators == null) + return; + if (isStarted()) + return; + startAnimators(); + postInvalidate(); + } + + @Override + public void stop() { + stopAnimators(); + } + + @Override + public boolean isRunning() { + if (mAnimators == null) + return false; + for (ValueAnimator animator : mAnimators) { + return animator.isRunning(); + } + return false; + } + + @Override + public void draw(@NonNull Canvas canvas) { + draw(canvas, mPaint); + } + + @Override + protected void onBoundsChange(Rect bounds) { + super.onBoundsChange(bounds); + setDrawBounds(bounds); + } + + + public abstract void draw(Canvas canvas, Paint paint); //具体的绘画 + + public abstract ArrayList onCreateAnimator(); //创建动画数据集 + + /** + * 判断是否有动画,没有则创建并且改变状态,有不处理 + */ + private void ensureAnimator() { + if (!mHasAnimators) { + mAnimators = onCreateAnimator(); + mHasAnimators = true; + } + } + + /** + * 开启动画集所有动画,并且添加自定义监听 + */ + private void startAnimators() { + for (int i = 0; i < mAnimators.size(); i++) { + ValueAnimator valueAnimator = mAnimators.get(i); + ValueAnimator.AnimatorUpdateListener updateListener = mUpdateListeners.get(valueAnimator); + if (updateListener != null) { + valueAnimator.addUpdateListener(updateListener); + } + valueAnimator.start(); + } + } + + /** + * 关闭动画集中所有开启的动画 + */ + private void stopAnimators() { + if (mAnimators == null) + return; + for (ValueAnimator mAnimator : mAnimators) { + if (mAnimator != null && mAnimator.isStarted()) { + mAnimator.removeAllUpdateListeners(); + mAnimator.end(); + } + } + } + + /** + * @return 第一个动画是否被启动 + */ + private boolean isStarted() { + for (ValueAnimator animator : mAnimators) { + return animator.isStarted(); + } + return false; + } + + + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + + } + + //region 获取属性 drawBounds width height centerX centerY + public void postInvalidate(){ + invalidateSelf(); + } + + public Rect getDrawBounds() { + return drawBounds; + } + + public int getWidth(){ + return drawBounds.width(); + } + + public int getHeight(){ + return drawBounds.height(); + } + + public int centerX(){ + return drawBounds.centerX(); + } + + public int centerY(){ + return drawBounds.centerY(); + } + + public float exactCenterX(){ + return drawBounds.exactCenterX(); + } + + public float exactCenterY(){ + return drawBounds.exactCenterY(); + } + //endregion +} diff --git a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/LoadingView.java b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/LoadingView.java new file mode 100644 index 0000000..ea728c2 --- /dev/null +++ b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/LoadingView.java @@ -0,0 +1,448 @@ +package com.czcg.viewlib.ui; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Rect; +import android.graphics.drawable.Animatable; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.AnimationUtils; + +import com.czcg.viewlib.R; +import com.czcg.viewlib.ui.indicators.BallPulseIndicator; + +/** + * Created by leipe on 2017/7/6. + */ + +public class LoadingView extends View { + private static final Indicator DEFAULT_INDICATOR = new BallPulseIndicator(); + private static final int MIN_SHOW_TIME = 500; //ms + private static final int MIN_DELAY = 500; //ms + + private long mStartTime = -1; + private boolean mPostedHide = false; + private boolean mPostedShow = false; + private boolean mDismissed = false; + + private final Runnable mDelayedHide = new Runnable() { + @Override + public void run() { + mPostedHide = false; + mStartTime = -1; + setVisibility(GONE); + } + }; + + private final Runnable mDelayedShow = new Runnable() { + @Override + public void run() { + mPostedShow = false; + if (!mDismissed) { + mStartTime = System.currentTimeMillis(); //启动时间设置为当前时间 + setVisibility(VISIBLE); + } + } + }; + + int mMinWidth; + int mMaxWidth; + int mMinHeight; + int mMaxHeight; + + private Indicator mIndicator; + private int mIndicatorColor; + + private boolean mShouldStartAnimationDrawable; + + public LoadingView(Context context) { + super(context); + init(context, null, 0, 0); + + } + + public LoadingView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(context, attrs, 0, R.style.AVLoadingIndicatorView); + } + + public LoadingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs, defStyleAttr, R.style.AVLoadingIndicatorView); + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public LoadingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(context, attrs, defStyleAttr, R.style.AVLoadingIndicatorView); + } + + @Override + protected boolean verifyDrawable(@NonNull Drawable who) { + return who == mIndicator || super.verifyDrawable(who); + } + + /** + * 根据显示隐藏判断是会否开启关闭动画 + * + * @param visibility visibilityId + */ + @Override + public void setVisibility(int visibility) { + if (getVisibility() != visibility) { + super.setVisibility(visibility); + if (visibility == GONE || visibility == INVISIBLE) { + stopAnimation(); + } else { + startAnimation(); + } + } + } + + /** + * 根据显示隐藏判断是会否开启关闭动画 + * + * @param changedView 改变的view + * @param visibility visibilityId + */ + @Override + protected void onVisibilityChanged(@NonNull View changedView, int visibility) { + super.onVisibilityChanged(changedView, visibility); + if (visibility == GONE || visibility == INVISIBLE) { + stopAnimation(); + } else { + startAnimation(); + } + } + + @Override + public void invalidateDrawable(@NonNull Drawable drawable) { + if (verifyDrawable(drawable)) { + final Rect dirty = drawable.getBounds(); + final int scrollX = getScrollX() + getPaddingLeft(); + final int scrollY = getScrollY() + getPaddingTop(); + invalidate(dirty.left + scrollX, dirty.top + scrollY, dirty.right + scrollX, dirty.bottom + scrollY); + } else { + super.invalidateDrawable(drawable); + } + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + updateDrawableBounds(w, h); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + drawTrack(canvas); + } + + /** + * 测量方法重写,进行计算精度,重新赋值 + * + * @param widthMeasureSpec widthMeasureSpec + * @param heightMeasureSpec heightMeasureSpec + */ + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int dw = 0; + int dh = 0; + final Drawable drawable = mIndicator; + if (drawable != null) { + dw = Math.max(mMinWidth, Math.min(mMaxWidth, drawable.getIntrinsicWidth())); + dh = Math.max(mMinHeight, Math.min(mMaxHeight, drawable.getIntrinsicHeight())); + } + updateDrawableState(); + dw += getPaddingLeft() + getPaddingRight(); + dh += getPaddingTop() + getPaddingBottom(); + final int measuredWidth = resolveSizeAndState(dw, widthMeasureSpec, 0); + final int measuredHeight = resolveSizeAndState(dh, heightMeasureSpec, 0); + setMeasuredDimension(measuredWidth, measuredHeight); + } + + @Override + protected void drawableStateChanged() { + super.drawableStateChanged(); + updateDrawableState(); + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + @Override + public void drawableHotspotChanged(float x, float y) { + super.drawableHotspotChanged(x, y); + if (mIndicator != null) { + mIndicator.setHotspot(x, y); + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + startAnimation(); + removeCallbacks(); + } + + @Override + protected void onDetachedFromWindow() { + stopAnimation(); + // This should come after stopAnimation(), otherwise an invalidate message remains in the + // queue, which can prevent the entire view hierarchy from being GC'ed during a rotation + super.onDetachedFromWindow(); + removeCallbacks(); + } + + /** + * 移除线程 防止GC + */ + private void removeCallbacks() { + removeCallbacks(mDelayedHide); + removeCallbacks(mDelayedShow); + } + + /** + * 更新mIndicator drawable状态 + */ + private void updateDrawableState() { + final int[] state = getDrawableState(); + if (mIndicator != null && mIndicator.isStateful()) { + mIndicator.setState(state); + } + } + + /** + * 平移画布并且更新动画开启状态 + * + * @param canvas 画布 + */ + private void drawTrack(Canvas canvas) { + final Drawable drawable = mIndicator; + if (drawable != null) { + // 保存画布 + final int saveCount = canvas.save(); + // 平移 padding + canvas.translate(getPaddingLeft(), getPaddingTop()); + drawable.draw(canvas); + canvas.restoreToCount(saveCount); + if (mShouldStartAnimationDrawable) { + ((Animatable) drawable).start(); + mShouldStartAnimationDrawable = false; + } + } + } + + /** + * 更改 mIndicator 的bounds + * + * @param w width + * @param h height + */ + private void updateDrawableBounds(int w, int h) { + w -= getPaddingRight() + getPaddingLeft(); + h -= getPaddingTop() + getPaddingBottom(); + + int right = w; + int bottom = h; + int top = 0; + int left = 0; + + if (mIndicator != null) { + // Maintain aspect ratio. Certain kinds of animated drawables + // get very confused otherwise. + final int intrinsicWidth = mIndicator.getIntrinsicWidth(); + final int intrinsicHeight = mIndicator.getIntrinsicHeight(); + final float intrinsicAspect = (float) intrinsicWidth / intrinsicHeight; + final float boundAspect = (float) w / h; + if (intrinsicAspect != boundAspect) { + if (boundAspect > intrinsicAspect) { + // New width is larger. Make it smaller to match height. + final int width = (int) (h * intrinsicAspect); + left = (w - width) / 2; + right = left + width; + } else { + // New height is larger. Make it smaller to match width. + final int height = (int) (w * (1 / intrinsicAspect)); + top = (h - height) / 2; + bottom = top + height; + } + } + mIndicator.setBounds(left, top, right, bottom); + } + } + + /** + * 初始化参数 + */ + private void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + mMinWidth = 24; + mMaxWidth = 48; + mMinHeight = 24; + mMaxHeight = 48; + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AVLoadingIndicatorView, defStyleAttr, defStyleRes); + mMinWidth = a.getDimensionPixelSize(R.styleable.AVLoadingIndicatorView_minWidth, mMinWidth); + mMaxWidth = a.getDimensionPixelSize(R.styleable.AVLoadingIndicatorView_maxWidth, mMaxWidth); + mMinHeight = a.getDimensionPixelSize(R.styleable.AVLoadingIndicatorView_minHeight, mMinHeight); + mMaxHeight = a.getDimensionPixelSize(R.styleable.AVLoadingIndicatorView_maxHeight, mMaxHeight); + String indicatorName = a.getString(R.styleable.AVLoadingIndicatorView_indicatorName); + mIndicatorColor = a.getColor(R.styleable.AVLoadingIndicatorView_indicatorColor, Color.WHITE); + setIndicator(indicatorName); //indicatorName没值在方法里已经处理了 + if (mIndicator == null) { + setIndicator(DEFAULT_INDICATOR); + } + a.recycle(); + } + + /** + * 设置具体的loading + * + * @param indicator 具体的loading对象 + */ + public void setIndicator(Indicator indicator) { + if (mIndicator != indicator) { + if (mIndicator != null) { + mIndicator.setCallback(null); + unscheduleDrawable(mIndicator); + } + mIndicator = indicator; + setIndicatorColor(mIndicatorColor); + if (indicator != null) { + indicator.setCallback(this); + } + postInvalidate(); + } + } + + /** + * 根据包名来设置具体的loading + * + * @param indicatorName loading对象的包名 + */ + public void setIndicator(String indicatorName) { + if (TextUtils.isEmpty(indicatorName)) + return; + StringBuilder drawableClassName = new StringBuilder(); + if (!indicatorName.contains(".")) { + String className = getClass().getPackage().getName(); + drawableClassName.append(className) + .append(".indicators") + .append("."); + } + drawableClassName.append(indicatorName); + + try { + Class drawableClass = Class.forName(drawableClassName.toString()); + Indicator indicator = (Indicator) drawableClass.newInstance(); + setIndicator(indicator); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public Indicator getIndicator() { + return mIndicator; + } + + /** + * 设置loading的颜色 ,支持以下格式 + * setIndicatorColor(0xFF00FF00) + * or + * setIndicatorColor(Color.BLUE) + * or + * setIndicatorColor(Color.parseColor("#FF4081")) + * or + * setIndicatorColor(0xFF00FF00) + * or + * setIndicatorColor(getResources().getColor(android.R.color.black)) + * + * @param color + */ + public void setIndicatorColor(int color) { + this.mIndicatorColor = color; + mIndicator.setColor(color); + } + + + public int getIndicatorColor() { + return mIndicatorColor; + } + + /** + * 开启动画 + */ + private void startAnimation() { + if (getVisibility() != VISIBLE) { + return; + } + if (mIndicator != null) { + mShouldStartAnimationDrawable = true; + } + postInvalidate(); + } + + /** + * 关闭动画 + */ + private void stopAnimation() { + if (mIndicator != null) { + mIndicator.stop(); + mShouldStartAnimationDrawable = false; + } + postInvalidate(); + } + + /** + * 平滑的显示 + */ + public void smoothToShow() { + startAnimation(AnimationUtils.loadAnimation(getContext(), android.R.anim.fade_in)); + show(); + } + + /** + * 平滑的隐藏 + */ + public void smoothToHide() { + startAnimation(AnimationUtils.loadAnimation(getContext(), android.R.anim.fade_out)); + hide(); + } + + /** + * 隐藏 + */ + public void hide() { + mDismissed = true; + removeCallbacks(mDelayedShow); + long diff = System.currentTimeMillis() - mStartTime; + if (diff >= MIN_SHOW_TIME || mStartTime == -1) { + // 如果间隔时间大于最大的显示时间 || 根本就没显示 + setVisibility(GONE); + } else { + if (!mPostedHide) { + postDelayed(mDelayedHide, MIN_SHOW_TIME - diff); + mPostedHide = true; + } + } + } + + /** + * 显示 + */ + public void show() { + mStartTime = -1; + mDismissed = false; + removeCallbacks(mDelayedHide); + if (!mPostedShow) { + postDelayed(mDelayedShow, MIN_DELAY); + mPostedShow = true; + } + } +} diff --git a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/indicators/BallClipRotateMultipleIndicator.java b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/indicators/BallClipRotateMultipleIndicator.java new file mode 100644 index 0000000..7013d6c --- /dev/null +++ b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/indicators/BallClipRotateMultipleIndicator.java @@ -0,0 +1,96 @@ +package com.czcg.viewlib.ui.indicators; + +import android.animation.ValueAnimator; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; + +import com.czcg.viewlib.ui.Indicator; + +import java.util.ArrayList; + +/** + * Created by leipe on 2017/7/7. + */ + +public class BallClipRotateMultipleIndicator extends Indicator { + + float scaleFloat = 1; + float degrees = 0; + + + @Override + public void draw(Canvas canvas, Paint paint) { + paint.setStrokeWidth(10); + paint.setStyle(Paint.Style.STROKE); + + float circleSpacing = 12; + float x = getWidth() / 2; + float y = getHeight() / 2; + + canvas.save(); + canvas.translate(x, y); + canvas.scale(scaleFloat, scaleFloat); + canvas.rotate(degrees); + + // 画大圆弧 + float[] bStartAngles = new float[]{135, -45}; + for (int i = 0; i < 2; i++) { + float left = -x + circleSpacing; + float top = -y + circleSpacing; + float right = x - circleSpacing; + float bottom = y - circleSpacing; + RectF rectF = new RectF(left, top, right, bottom); + canvas.drawArc(rectF, bStartAngles[i], 90, false, paint); + } + + canvas.restore(); + canvas.translate(x, y); + canvas.scale(scaleFloat, scaleFloat); + canvas.rotate(-degrees); + // 画小圆弧 / 1.8f + float[] sStartAngles = new float[]{225, 45}; + for (int i = 0; i < 2; i++) { + float left = -x / 1.8f + circleSpacing; + float top = -y / 1.8f + circleSpacing; + float right = x / 1.8f - circleSpacing; + float bottom = y / 1.8f - circleSpacing; + RectF rectF = new RectF(left, top, right, bottom); + canvas.drawArc(rectF, sStartAngles[i], 90, false, paint); + } + } + + @Override + public ArrayList onCreateAnimator() { + ArrayList animators = new ArrayList<>(); + + ValueAnimator scaleAnimator = ValueAnimator.ofFloat(1, 0.6f, 1); + scaleAnimator.setDuration(1000); + scaleAnimator.setRepeatCount(-1); + + addUpdateListener(scaleAnimator, new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + scaleFloat = (float) valueAnimator.getAnimatedValue(); + postInvalidate(); + } + }); + + // 注意这边不能用ofInt,否则valueAnimator.getAnimatedValue()返回Integer会导致强转报错 + ValueAnimator degreesAnimator = ValueAnimator.ofFloat(0, 180, 360); + degreesAnimator.setDuration(1000); + degreesAnimator.setRepeatCount(-1); + addUpdateListener(degreesAnimator, new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + degrees = (float) valueAnimator.getAnimatedValue(); + postInvalidate(); + } + }); + + animators.add(scaleAnimator); + animators.add(degreesAnimator); + + return animators; + } +} diff --git a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/indicators/BallGridPulseIndicator.java b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/indicators/BallGridPulseIndicator.java new file mode 100644 index 0000000..ede19c5 --- /dev/null +++ b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/indicators/BallGridPulseIndicator.java @@ -0,0 +1,108 @@ +package com.czcg.viewlib.ui.indicators; + +import android.animation.ValueAnimator; +import android.graphics.Canvas; +import android.graphics.Paint; + +import com.czcg.viewlib.ui.Indicator; + +import java.util.ArrayList; + +/** 九宫格 + * Created by leipe on 2017/7/7. + */ + +public class BallGridPulseIndicator extends Indicator { + private static final int ALPHA = 255; + + private static final float SCALE = 1.0f; + + int[] alphas = new int[]{ALPHA, + ALPHA, + ALPHA, + ALPHA, + ALPHA, + ALPHA, + ALPHA, + ALPHA, + ALPHA}; + + float[] scaleFloats = new float[]{SCALE, + SCALE, + SCALE, + SCALE, + SCALE, + SCALE, + SCALE, + SCALE, + SCALE}; + + /** + * 阅读此处代码推荐在纸上画图 + */ + @Override + public void draw(Canvas canvas, Paint paint) { + float circleSpacing = 4; //每两个之间的间隔大小 + // 半径计算公式 + // (view的宽度-4个间隔) / 三个圆 = 直径 / 2 = 半径 + float radius = (getWidth() - circleSpacing * 4) / 6; + // 左边边框到第一个点中心点的距离 = 宽度/2 - (1个直径+1个间隔) + float x = getWidth() / 2 - (radius * 2 + circleSpacing); + // 形状是正方形,所以也用宽度就行了 + float y = getWidth() / 2 - (radius * 2 + circleSpacing); + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + canvas.save(); + // x + 直径 * 对应的下标 + 间隔 * 对应的下标 + float translateX = x + (radius * 2 * j) + circleSpacing * j; //此处下标为 j + float translateY = x + (radius * 2 * i) + circleSpacing * i; //此处下标为 i + // 平移画布 + canvas.translate(translateX, translateY); + canvas.scale(scaleFloats[3 * i + j], scaleFloats[3 * i + j]); + paint.setAlpha(alphas[3 * i + j]); + canvas.drawCircle(0, 0, radius, paint); + canvas.restore(); + } + } + } + + @Override + public ArrayList onCreateAnimator() { + ArrayList animators = new ArrayList<>(); + // 下面两排数组没有任何意义,随便瞎搞的 + int[] durations = {720, 1020, 1280, 1420, 1450, 1180, 870, 1450, 1060}; + int[] delays = {-60, 250, -170, 480, 310, 30, 460, 780, 450}; + for (int i = 0; i < 9; i++) { + final int index = i; + // 缩放动画 + ValueAnimator scaleAnim = ValueAnimator.ofFloat(1, 0.5f, 1); + scaleAnim.setDuration(durations[i]); + scaleAnim.setRepeatCount(-1); + scaleAnim.setStartDelay(delays[i]); + addUpdateListener(scaleAnim, new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + scaleFloats[index] = (float) animation.getAnimatedValue(); + postInvalidate(); + } + }); + + // 透明度动画 + ValueAnimator alphaAnim = ValueAnimator.ofInt(255, 210, 122, 255); + alphaAnim.setDuration(durations[i]); + alphaAnim.setRepeatCount(-1); + alphaAnim.setStartDelay(delays[i]); + addUpdateListener(alphaAnim, new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + alphas[index] = (int) animation.getAnimatedValue(); + postInvalidate(); + } + }); + animators.add(scaleAnim); + animators.add(alphaAnim); + + } + return animators; + } +} diff --git a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/indicators/BallPulseIndicator.java b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/indicators/BallPulseIndicator.java new file mode 100644 index 0000000..f769997 --- /dev/null +++ b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/ui/indicators/BallPulseIndicator.java @@ -0,0 +1,60 @@ +package com.czcg.viewlib.ui.indicators; + +import android.animation.ValueAnimator; +import android.graphics.Canvas; +import android.graphics.Paint; + +import com.czcg.viewlib.ui.Indicator; + +import java.util.ArrayList; + +/** 简单的3个点 + * Created by leipe on 2017/7/7. + */ + +public class BallPulseIndicator extends Indicator { + public static final float SCALE = 1.0f; + private float[] scaleFloats = new float[]{SCALE, + SCALE, + SCALE}; + + @Override + public void draw(Canvas canvas, Paint paint) { + float circleSpacing = 4; + float radius = (Math.min(getWidth(), getHeight()) - circleSpacing * 2) / 6; + float x = getWidth() / 2 - (radius * 2 + circleSpacing); + float y = getHeight() / 2; + for (int i = 0; i < 3; i++) { + canvas.save(); + float translateX = x + (radius * 2) * i + circleSpacing * 1; + canvas.translate(translateX,y); + canvas.scale(scaleFloats[i],scaleFloats[i]); + canvas.drawCircle(0,0,radius,paint); + canvas.restore(); + } + } + + @Override + public ArrayList onCreateAnimator() { + ArrayList animators = new ArrayList<>(); + int[] delays = {120, 240, 360}; + for (int i = 0; i < 3; i++) { + final int index = i; + + ValueAnimator animator = ValueAnimator.ofFloat(1, 0.3F, 1); + animator.setDuration(750); //设置间隔时间 + animator.setRepeatCount(-1); //设置循环次数 + animator.setStartDelay(delays[i]); //设置启动延迟时间 + animators.add(animator); + + addUpdateListener(animator, new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + scaleFloats[index] = (float) valueAnimator.getAnimatedValue(); + postInvalidate(); + } + }); + } + return animators; + } +} diff --git a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/DialogWidget.java b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/DialogWidget.java index 3bdfc8c..1f55b03 100644 --- a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/DialogWidget.java +++ b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/DialogWidget.java @@ -1,16 +1,9 @@ package com.czcg.viewlib.widget; -import android.app.Dialog; import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.czcg.viewlib.R; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; /** @@ -18,63 +11,25 @@ */ public class DialogWidget { private static DialogWidget widget = new DialogWidget(); + private DialogWidget() { } - public static DialogWidget getInstance(){ - return widget; - } - - private Dialog loadingDialog; - public Dialog createLoadingDialog(Context context,boolean isCancel) { - LayoutInflater inflater = LayoutInflater.from(context); - View v = inflater.inflate(R.layout.new_dialog_load, null);// 得到加载view - LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);// 加载布局 - // main.xml中的ImageView - ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img); - TextView tipTextView = (TextView) v.findViewById(R.id.tipTextView);// 提示文字 - // 加载动画 - Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation( - context, R.anim.loading_animation); - // 使用ImageView显示动画 - spaceshipImage.startAnimation(hyperspaceJumpAnimation); - //tipTextView.setText(msg);// 设置加载信息 - - loadingDialog = new Dialog(context, R.style.loading_dialog);// 创建自定义样式dialog - loadingDialog.setCancelable(isCancel);// 不可以用“返回键”取消 - loadingDialog.setCanceledOnTouchOutside(isCancel);//false 不可取消 - loadingDialog.show(); - loadingDialog.setContentView(layout, new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.WRAP_CONTENT, - LinearLayout.LayoutParams.WRAP_CONTENT));// 设置布局 - - return loadingDialog; + public static DialogWidget getInstance() { + return widget; } - public Dialog createLoadingDialog(Context context, String msg) { - - LayoutInflater inflater = LayoutInflater.from(context); - View v = inflater.inflate(R.layout.new_dialog_load, null);// 得到加载view - LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);// 加载布局 - // main.xml中的ImageView - ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img); - TextView tipTextView = (TextView) v.findViewById(R.id.tipTextView);// 提示文字 - // 加载动画 - Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation( - context, R.anim.loading_animation); - // 使用ImageView显示动画 - spaceshipImage.startAnimation(hyperspaceJumpAnimation); - tipTextView.setText(msg);// 设置加载信息 - - loadingDialog = new Dialog(context, R.style.loading_dialog);// 创建自定义样式dialog - loadingDialog.setCancelable(false);// 不可以用“返回键”取消 - loadingDialog.show(); - loadingDialog.setContentView(layout, new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.WRAP_CONTENT, - LinearLayout.LayoutParams.WRAP_CONTENT));// 设置布局 - - return loadingDialog; - + public void show(Context context) { + + if (context instanceof FragmentActivity){ + FragmentActivity activity = (FragmentActivity) context; + FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction(); + Fragment prev = activity.getSupportFragmentManager().findFragmentByTag("dialog"); + if (prev != null) { + ft.remove(prev); + } + ft.addToBackStack(null); + LoadDialogFragment.newInstance().show(ft, "dialog"); + } } - } diff --git a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/LoadDialogFragment.java b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/LoadDialogFragment.java new file mode 100644 index 0000000..f568338 --- /dev/null +++ b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/LoadDialogFragment.java @@ -0,0 +1,69 @@ +package com.czcg.viewlib.widget; + +import android.content.Context; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.content.res.ResourcesCompat; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; + +import com.czcg.viewlib.R; +import com.czcg.viewlib.ui.LoadingView; +import com.czcg.viewlib.utils.DensityConversionUtil; + +/** + * Created by leipe on 2017/7/10. + */ + +public class LoadDialogFragment extends DialogFragment { + + private FragmentActivity _mActivity; + private LoadingView loadingView; + + public static LoadDialogFragment newInstance() { + LoadDialogFragment fragment = new LoadDialogFragment(); + return fragment; + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + _mActivity = (FragmentActivity) context; + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View inflate = inflater.inflate(R.layout.view_load, container, false); + loadingView = (LoadingView) inflate.findViewById(R.id.loadView); + loadingView.setIndicatorColor(ResourcesCompat.getColor(_mActivity.getResources(), R.color.orange, null)); + return inflate; + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); + // //对话框背景色 原有边框会自动消失 + getDialog().getWindow().setDimAmount(0);//背景黑暗度 + + setCancelable(false); + } + + @Override + public void onResume() { + super.onResume(); + getDialog().getWindow().setLayout(DensityConversionUtil.dpToPx(_mActivity, 180), + DensityConversionUtil.dpToPx(_mActivity, 120)); + } + + public void dismissDialog() { + if (_mActivity != null) { + dismiss(); + } + } +} diff --git a/ViewComponent/viewlib/src/main/res/layout/view_load.xml b/ViewComponent/viewlib/src/main/res/layout/view_load.xml new file mode 100644 index 0000000..17d2167 --- /dev/null +++ b/ViewComponent/viewlib/src/main/res/layout/view_load.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/ViewComponent/viewlib/src/main/res/values/attrs.xml b/ViewComponent/viewlib/src/main/res/values/attrs.xml new file mode 100644 index 0000000..7a23b1a --- /dev/null +++ b/ViewComponent/viewlib/src/main/res/values/attrs.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/ViewComponent/viewlib/src/main/res/values/styles.xml b/ViewComponent/viewlib/src/main/res/values/styles.xml index 6b532e7..18d2509 100644 --- a/ViewComponent/viewlib/src/main/res/values/styles.xml +++ b/ViewComponent/viewlib/src/main/res/values/styles.xml @@ -29,4 +29,29 @@ @color/gray + + + + + + + From fc7623fe8ae43019d0467daa2c7a63f5ccf436e8 Mon Sep 17 00:00:00 2001 From: leipeng Date: Mon, 10 Jul 2017 17:34:20 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../viewlib/widget/LoadDialogFragment.java | 19 ++++++++----------- .../src/main/res/drawable/shape_load_view.xml | 5 +++++ .../viewlib/src/main/res/layout/view_load.xml | 1 + 3 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 ViewComponent/viewlib/src/main/res/drawable/shape_load_view.xml diff --git a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/LoadDialogFragment.java b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/LoadDialogFragment.java index f568338..33fb54b 100644 --- a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/LoadDialogFragment.java +++ b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/LoadDialogFragment.java @@ -41,24 +41,21 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, View inflate = inflater.inflate(R.layout.view_load, container, false); loadingView = (LoadingView) inflate.findViewById(R.id.loadView); loadingView.setIndicatorColor(ResourcesCompat.getColor(_mActivity.getResources(), R.color.orange, null)); + getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); return inflate; } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); - // //对话框背景色 原有边框会自动消失 - getDialog().getWindow().setDimAmount(0);//背景黑暗度 + public void onStart() { + super.onStart(); - setCancelable(false); - } - - @Override - public void onResume() { - super.onResume(); getDialog().getWindow().setLayout(DensityConversionUtil.dpToPx(_mActivity, 180), DensityConversionUtil.dpToPx(_mActivity, 120)); + getDialog().getWindow().setBackgroundDrawable(ResourcesCompat.getDrawable(_mActivity.getResources() + ,R.drawable.shape_load_view,null)); + // //对话框背景色 原有边框会自动消失 + getDialog().getWindow().setDimAmount(0);//背景黑暗度 + setCancelable(false); } public void dismissDialog() { diff --git a/ViewComponent/viewlib/src/main/res/drawable/shape_load_view.xml b/ViewComponent/viewlib/src/main/res/drawable/shape_load_view.xml new file mode 100644 index 0000000..9a407cc --- /dev/null +++ b/ViewComponent/viewlib/src/main/res/drawable/shape_load_view.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ViewComponent/viewlib/src/main/res/layout/view_load.xml b/ViewComponent/viewlib/src/main/res/layout/view_load.xml index 17d2167..aa697f9 100644 --- a/ViewComponent/viewlib/src/main/res/layout/view_load.xml +++ b/ViewComponent/viewlib/src/main/res/layout/view_load.xml @@ -4,6 +4,7 @@ android:layout_width="280dp" android:layout_height="90dp" android:gravity="center" + android:padding="5dp" android:orientation="vertical"> Date: Mon, 31 Jul 2017 14:56:24 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9activity-->fragmentActivi?= =?UTF-8?q?ty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/czcg/viewlib/widget/LoadDialogFragment.java | 2 +- .../main/java/com/czcg/viewlib/widget/SheetViewWidget.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/LoadDialogFragment.java b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/LoadDialogFragment.java index 33fb54b..ae9406e 100644 --- a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/LoadDialogFragment.java +++ b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/LoadDialogFragment.java @@ -48,7 +48,7 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Override public void onStart() { super.onStart(); - + // 这里设置大小,布局大小没有效果 getDialog().getWindow().setLayout(DensityConversionUtil.dpToPx(_mActivity, 180), DensityConversionUtil.dpToPx(_mActivity, 120)); getDialog().getWindow().setBackgroundDrawable(ResourcesCompat.getDrawable(_mActivity.getResources() diff --git a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/SheetViewWidget.java b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/SheetViewWidget.java index 5f49a3a..a0a5f2c 100644 --- a/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/SheetViewWidget.java +++ b/ViewComponent/viewlib/src/main/java/com/czcg/viewlib/widget/SheetViewWidget.java @@ -1,7 +1,7 @@ package com.czcg.viewlib.widget; +import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; -import android.support.v7.app.AppCompatActivity; import com.czcg.viewlib.beans.SheetBean; import com.czcg.viewlib.fragments.ShootingDialogFragment; @@ -21,7 +21,7 @@ public static SheetViewWidget getInstance(){ return widget; } - public void createFragment(AppCompatActivity activity, SheetBean sheetBean, SheetViewListener listener) { + public void createFragment(FragmentActivity activity, SheetBean sheetBean, SheetViewListener listener) { sheetListener = listener; ShootingDialogFragment dialogFragment = (ShootingDialogFragment) ShootingDialogFragment.newInstance(sheetBean); FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();