diff --git a/.gitignore b/.gitignore
index afbdab3..cfb7164 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,5 @@
.gradle
/local.properties
-/.idea/workspace.xml
-/.idea/libraries
+/.idea
.DS_Store
/build
diff --git a/.idea/.name b/.idea/.name
deleted file mode 100644
index d32c242..0000000
--- a/.idea/.name
+++ /dev/null
@@ -1 +0,0 @@
-android-shapeLoadingView
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index 217af47..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
deleted file mode 100644
index e7bedf3..0000000
--- a/.idea/copyright/profiles_settings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
deleted file mode 100644
index e206d70..0000000
--- a/.idea/encodings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index b6351a7..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index a2cdff1..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1.7
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index edd4752..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml
deleted file mode 100644
index 922003b..0000000
--- a/.idea/scopes/scope_settings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 6564d52..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/app.iml b/app/app.iml
index cf6f2d7..2ffb599 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -9,13 +9,9 @@
-
-
-
- generateDebugAndroidTestSources
generateDebugSources
@@ -28,72 +24,95 @@
-
+
+
-
+
+
-
+
-
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
-
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 4bcc3c3..2b4202a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,13 +1,13 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 21
- buildToolsVersion "21.1.2"
+ compileSdkVersion 25
+ buildToolsVersion '25.0.0'
defaultConfig {
applicationId "com.mingle"
minSdkVersion 9
- targetSdkVersion 21
+ targetSdkVersion 25
versionCode 1
versionName "1.0"
}
@@ -21,6 +21,6 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
- compile 'com.android.support:appcompat-v7:22.0.0'
+ compile 'com.android.support:appcompat-v7:25.3.1'
compile project(':shapeloading')
}
diff --git a/app/src/main/java/com/mingle/DialogDemoActivity.java b/app/src/main/java/com/mingle/DialogDemoActivity.java
index 44ea227..2181790 100644
--- a/app/src/main/java/com/mingle/DialogDemoActivity.java
+++ b/app/src/main/java/com/mingle/DialogDemoActivity.java
@@ -16,8 +16,9 @@ public class DialogDemoActivity extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog_demo);
- shapeLoadingDialog=new ShapeLoadingDialog(this);
- shapeLoadingDialog.setLoadingText("加载中...");
+ shapeLoadingDialog = new ShapeLoadingDialog.Builder(this)
+ .loadText("加载中...")
+ .build();
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
diff --git a/build.gradle b/build.gradle
index 64a2967..150656d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:1.2.3'
+ classpath 'com.android.tools.build:gradle:2.3.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 0c71e76..1c09fa9 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed Apr 10 15:27:10 PDT 2013
+#Fri May 05 11:08:53 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
diff --git a/shapeloading/build.gradle b/shapeloading/build.gradle
index 0086ed7..dd5cbf4 100644
--- a/shapeloading/build.gradle
+++ b/shapeloading/build.gradle
@@ -1,12 +1,12 @@
apply plugin: 'com.android.library'
android {
- compileSdkVersion 21
- buildToolsVersion "21.1.2"
+ compileSdkVersion 25
+ buildToolsVersion '25.0.0'
defaultConfig {
minSdkVersion 9
- targetSdkVersion 21
+ targetSdkVersion 25
versionCode 1
versionName "1.0.3"
}
diff --git a/shapeloading/shapeloading.iml b/shapeloading/shapeloading.iml
index 44a6011..44a74e6 100644
--- a/shapeloading/shapeloading.iml
+++ b/shapeloading/shapeloading.iml
@@ -9,13 +9,9 @@
-
-
-
- generateDebugAndroidTestSources
generateDebugSources
@@ -23,71 +19,82 @@
-
+
-
+
+
-
+
+
-
+
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
-
-
+
+
+
-
-
-
-
-
-
-
+
+
-
-
-
+
+
-
+
diff --git a/shapeloading/src/main/java/com/mingle/widget/LoadingView.java b/shapeloading/src/main/java/com/mingle/widget/LoadingView.java
index 463bcfb..db6b5c0 100644
--- a/shapeloading/src/main/java/com/mingle/widget/LoadingView.java
+++ b/shapeloading/src/main/java/com/mingle/widget/LoadingView.java
@@ -12,23 +12,26 @@
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
-import android.widget.FrameLayout;
import android.widget.ImageView;
+import android.widget.LinearLayout;
import android.widget.TextView;
import com.mingle.shapeloading.R;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.AnimatorSet;
import com.nineoldandroids.animation.ObjectAnimator;
+import com.nineoldandroids.view.ViewHelper;
/**
* Created by zzz40500 on 15/4/6.
*/
-public class LoadingView extends FrameLayout {
+public class LoadingView extends LinearLayout {
private static final int ANIMATION_DURATION = 500;
+ private static final float FACTOR = 1.2f;
+
private static float mDistance = 200;
private ShapeLoadingView mShapeLoadingView;
@@ -39,29 +42,26 @@ public class LoadingView extends FrameLayout {
private int mTextAppearance;
private String mLoadText;
+ private AnimatorSet mUpAnimatorSet;
+ private AnimatorSet mDownAnimatorSet;
+
+ private boolean mStopped = false;
+ private int mDelay;
public LoadingView(Context context) {
super(context);
+ init(context, null);
}
public LoadingView(Context context, AttributeSet attrs) {
- super(context, attrs, 0);
+ super(context, attrs);
init(context, attrs);
}
- private void init(Context context, AttributeSet attrs) {
-
- TypedArray typedArray = context
- .obtainStyledAttributes(attrs, R.styleable.LoadingView);
- mLoadText = typedArray.getString(R.styleable.LoadingView_loadingText);
- mTextAppearance = typedArray.getResourceId(R.styleable.LoadingView_loadingTextAppearance, -1);
-
- typedArray.recycle();
- }
-
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
public LoadingView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
@@ -73,8 +73,34 @@ public LoadingView(Context context, AttributeSet attrs, int defStyleAttr, int de
init(context, attrs);
}
- public int dip2px(float dipValue) {
- final float scale = getContext().getResources().getDisplayMetrics().density;
+ private void init(Context context, AttributeSet attrs) {
+
+ setOrientation(VERTICAL);
+ mDistance = dip2px(context, 54f);
+ LayoutInflater.from(context).inflate(R.layout.load_view, this, true);
+ mShapeLoadingView = (ShapeLoadingView) findViewById(R.id.shapeLoadingView);
+ mIndicationIm = (ImageView) findViewById(R.id.indication);
+ mLoadTextView = (TextView) findViewById(R.id.promptTV);
+ ViewHelper.setScaleX(mIndicationIm, 0.2f);
+
+ TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.LoadingView);
+ String loadText = typedArray.getString(R.styleable.LoadingView_loadingText);
+ int textAppearance = typedArray.getResourceId(R.styleable.LoadingView_loadingText, -1);
+ mDelay = typedArray.getInteger(R.styleable.LoadingView_delay, 80);
+ typedArray.recycle();
+
+ if (textAppearance != -1) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ mLoadTextView.setTextAppearance(textAppearance);
+ } else {
+ mLoadTextView.setTextAppearance(getContext(), textAppearance);
+ }
+ }
+ setLoadingText(loadText);
+ }
+
+ private int dip2px(Context context, float dipValue) {
+ final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
@@ -82,43 +108,24 @@ public int dip2px(float dipValue) {
@Override
protected void onFinishInflate() {
super.onFinishInflate();
-
- View view = LayoutInflater.from(getContext()).inflate(R.layout.load_view, null);
-
- mDistance = dip2px(54f);
-
- LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-
- layoutParams.gravity = Gravity.CENTER;
-
- mShapeLoadingView = (ShapeLoadingView) view.findViewById(R.id.shapeLoadingView);
-
- mIndicationIm = (ImageView) view.findViewById(R.id.indication);
- mLoadTextView = (TextView) view.findViewById(R.id.promptTV);
-
- if (mTextAppearance != -1) {
- mLoadTextView.setTextAppearance(getContext(), mTextAppearance);
+ if (getVisibility() == VISIBLE) {
+ startLoading(mDelay);
}
- setLoadingText(mLoadText);
-
- addView(view, layoutParams);
-
-
- startLoading(900);
}
-
- private AnimatorSet mAnimatorSet = null;
-
private Runnable mFreeFallRunnable = new Runnable() {
@Override
public void run() {
+ ViewHelper.setRotation(mShapeLoadingView, 180f);
+ ViewHelper.setTranslationY(mShapeLoadingView, 0f);
+ ViewHelper.setScaleX(mIndicationIm, 0.2f);
+ mStopped = false;
freeFall();
}
};
private void startLoading(long delay) {
- if (mAnimatorSet != null && mAnimatorSet.isRunning()) {
+ if (mDownAnimatorSet != null && mDownAnimatorSet.isRunning()) {
return;
}
this.removeCallbacks(mFreeFallRunnable);
@@ -129,29 +136,60 @@ private void startLoading(long delay) {
}
}
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ stopLoading();
+ }
+
private void stopLoading() {
- if (mAnimatorSet != null) {
- if (mAnimatorSet.isRunning()) {
- mAnimatorSet.cancel();
+ mStopped = true;
+ if (mUpAnimatorSet != null) {
+ if (mUpAnimatorSet.isRunning()) {
+ mUpAnimatorSet.cancel();
+ }
+ mUpAnimatorSet.removeAllListeners();
+ for (Animator animator : mUpAnimatorSet.getChildAnimations()) {
+ animator.removeAllListeners();
}
- mAnimatorSet = null;
+ mUpAnimatorSet = null;
+ }
+ if (mDownAnimatorSet != null) {
+ if (mDownAnimatorSet.isRunning()) {
+ mDownAnimatorSet.cancel();
+ }
+ mDownAnimatorSet.removeAllListeners();
+ for (Animator animator : mDownAnimatorSet.getChildAnimations()) {
+ animator.removeAllListeners();
+ }
+ mDownAnimatorSet = null;
}
this.removeCallbacks(mFreeFallRunnable);
}
@Override
public void setVisibility(int visibility) {
+ this.setVisibility(visibility, mDelay);
+ }
+
+ public void setVisibility(int visibility, int delay) {
super.setVisibility(visibility);
if (visibility == View.VISIBLE) {
- startLoading(200);
+ startLoading(delay);
} else {
stopLoading();
}
}
- public void setLoadingText(CharSequence loadingText) {
+ public void setDelay(int delay) {
+ mDelay = delay;
+ }
+ public int getDelay() {
+ return mDelay;
+ }
+ public void setLoadingText(CharSequence loadingText) {
if (TextUtils.isEmpty(loadingText)) {
mLoadTextView.setVisibility(GONE);
} else {
@@ -161,113 +199,112 @@ public void setLoadingText(CharSequence loadingText) {
mLoadTextView.setText(loadingText);
}
+ public CharSequence getLoadingText(){
+ return mLoadTextView.getText();
+ }
+
/**
* 上抛
*/
public void upThrow() {
- ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mShapeLoadingView, "translationY", mDistance, 0);
- ObjectAnimator scaleIndication = ObjectAnimator.ofFloat(mIndicationIm, "scaleX", 0.2f, 1);
-
+ if (mUpAnimatorSet == null) {
+ ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mShapeLoadingView, "translationY", mDistance, 0);
+ ObjectAnimator scaleIndication = ObjectAnimator.ofFloat(mIndicationIm, "scaleX", 1f, 0.2f);
- ObjectAnimator objectAnimator1 = null;
- switch (mShapeLoadingView.getShape()) {
- case SHAPE_RECT:
+ ObjectAnimator objectAnimator1 = null;
+ switch (mShapeLoadingView.getShape()) {
+ case SHAPE_RECT:
+ objectAnimator1 = ObjectAnimator.ofFloat(mShapeLoadingView, "rotation", 0, 180);
- objectAnimator1 = ObjectAnimator.ofFloat(mShapeLoadingView, "rotation", 0, -120);
+ break;
+ case SHAPE_CIRCLE:
+ objectAnimator1 = ObjectAnimator.ofFloat(mShapeLoadingView, "rotation", 0, 180);
- break;
- case SHAPE_CIRCLE:
- objectAnimator1 = ObjectAnimator.ofFloat(mShapeLoadingView, "rotation", 0, 180);
-
- break;
- case SHAPE_TRIANGLE:
-
- objectAnimator1 = ObjectAnimator.ofFloat(mShapeLoadingView, "rotation", 0, 180);
-
- break;
- }
+ break;
+ case SHAPE_TRIANGLE:
+ objectAnimator1 = ObjectAnimator.ofFloat(mShapeLoadingView, "rotation", 0, 180);
- objectAnimator.setDuration(ANIMATION_DURATION);
- objectAnimator1.setDuration(ANIMATION_DURATION);
- objectAnimator.setInterpolator(new DecelerateInterpolator(factor));
- objectAnimator1.setInterpolator(new DecelerateInterpolator(factor));
- AnimatorSet animatorSet = new AnimatorSet();
- animatorSet.setDuration(ANIMATION_DURATION);
- animatorSet.playTogether(objectAnimator, objectAnimator1, scaleIndication);
+ break;
+ }
+ mUpAnimatorSet = new AnimatorSet();
+ mUpAnimatorSet.playTogether(objectAnimator, objectAnimator1, scaleIndication);
- animatorSet.addListener(new Animator.AnimatorListener() {
- @Override
- public void onAnimationStart(Animator animation) {
+ mUpAnimatorSet.setDuration(ANIMATION_DURATION);
+ mUpAnimatorSet.setInterpolator(new DecelerateInterpolator(FACTOR));
- }
+ mUpAnimatorSet.addListener(new Animator.AnimatorListener() {
+ @Override
+ public void onAnimationStart(Animator animation) {
- @Override
- public void onAnimationEnd(Animator animation) {
- freeFall();
+ }
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (!mStopped) {
+ freeFall();
+ }
- }
+ }
- @Override
- public void onAnimationCancel(Animator animation) {
+ @Override
+ public void onAnimationCancel(Animator animation) {
- }
+ }
- @Override
- public void onAnimationRepeat(Animator animation) {
+ @Override
+ public void onAnimationRepeat(Animator animation) {
- }
- });
- animatorSet.start();
+ }
+ });
+ }
+ mUpAnimatorSet.start();
}
- public float factor = 1.2f;
-
/**
* 下落
*/
public void freeFall() {
- ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mShapeLoadingView, "translationY", 0, mDistance);
- ObjectAnimator scaleIndication = ObjectAnimator.ofFloat(mIndicationIm, "scaleX", 1, 0.2f);
+ if (mDownAnimatorSet == null) {
+ ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mShapeLoadingView, "translationY", 0, mDistance);
+ ObjectAnimator scaleIndication = ObjectAnimator.ofFloat(mIndicationIm, "scaleX", 0.2f, 1f);
+ mDownAnimatorSet = new AnimatorSet();
+ mDownAnimatorSet.playTogether(objectAnimator, scaleIndication);
+ mDownAnimatorSet.setDuration(ANIMATION_DURATION);
+ mDownAnimatorSet.setInterpolator(new AccelerateInterpolator(FACTOR));
+ mDownAnimatorSet.addListener(new Animator.AnimatorListener() {
+ @Override
+ public void onAnimationStart(Animator animation) {
- objectAnimator.setDuration(ANIMATION_DURATION);
- objectAnimator.setInterpolator(new AccelerateInterpolator(factor));
- AnimatorSet animatorSet = new AnimatorSet();
- animatorSet.setDuration(ANIMATION_DURATION);
- animatorSet.playTogether(objectAnimator, scaleIndication);
- animatorSet.addListener(new Animator.AnimatorListener() {
- @Override
- public void onAnimationStart(Animator animation) {
+ }
- }
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (!mStopped) {
+ mShapeLoadingView.changeShape();
+ upThrow();
+ }
+ }
- @Override
- public void onAnimationEnd(Animator animation) {
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ }
- mShapeLoadingView.changeShape();
- upThrow();
- }
-
- @Override
- public void onAnimationCancel(Animator animation) {
-
- }
+ @Override
+ public void onAnimationRepeat(Animator animation) {
- @Override
- public void onAnimationRepeat(Animator animation) {
-
- }
- });
- animatorSet.start();
+ }
+ });
+ }
+ mDownAnimatorSet.start();
}
diff --git a/shapeloading/src/main/java/com/mingle/widget/ShapeLoadingDialog.java b/shapeloading/src/main/java/com/mingle/widget/ShapeLoadingDialog.java
index 5e8f91a..dd7b2b8 100644
--- a/shapeloading/src/main/java/com/mingle/widget/ShapeLoadingDialog.java
+++ b/shapeloading/src/main/java/com/mingle/widget/ShapeLoadingDialog.java
@@ -2,7 +2,9 @@
import android.app.Dialog;
import android.content.Context;
+import android.content.DialogInterface;
import android.graphics.drawable.GradientDrawable;
+import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -11,53 +13,97 @@
/**
* Created by zzz40500 on 15/6/15.
*/
-public class ShapeLoadingDialog {
+public class ShapeLoadingDialog extends Dialog{
-
-
- private Context mContext;
- private Dialog mDialog;
private LoadingView mLoadingView;
- private View mDialogContentView;
+ private Builder mBuilder;
- public ShapeLoadingDialog(Context context) {
- this.mContext=context;
- init();
+ private ShapeLoadingDialog(Builder builder) {
+ super(builder.mContext, R.style.custom_dialog);
+ mBuilder = builder;
+ setCancelable(mBuilder.mCancelable);
+ setCanceledOnTouchOutside(mBuilder.mCanceledOnTouchOutside);
}
- private void init() {
- mDialog = new Dialog(mContext, R.style.custom_dialog);
- mDialogContentView= LayoutInflater.from(mContext).inflate(R.layout.layout_dialog,null);
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.layout_dialog);
+ mLoadingView = (LoadingView) findViewById(R.id.loadView);
- mLoadingView= (LoadingView) mDialogContentView.findViewById(R.id.loadView);
- mDialog.setContentView(mDialogContentView);
+ mLoadingView.setDelay(mBuilder.mDelay);
+ mLoadingView.setLoadingText(mBuilder.mLoadText);
+
+ setOnDismissListener(new DialogInterface.OnDismissListener() {
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ mLoadingView.setVisibility(View.GONE);
+ }
+ });
}
- public void setBackground(int color){
- GradientDrawable gradientDrawable= (GradientDrawable) mDialogContentView.getBackground();
- gradientDrawable.setColor(color);
+ @Override
+ public void show() {
+ super.show();
+ mLoadingView.setVisibility(View.VISIBLE);
}
- public void setLoadingText(CharSequence charSequence){
- mLoadingView.setLoadingText(charSequence);
+ public Builder getBuilder() {
+ return mBuilder;
}
- public void show(){
- mDialog.show();
+ public static class Builder{
- }
+ private Context mContext;
- public void dismiss(){
- mDialog.dismiss();
- }
+ private int mDelay = 80;
- public Dialog getDialog(){
- return mDialog;
- }
+ private CharSequence mLoadText;
+
+ private boolean mCancelable = true;
+
+ private boolean mCanceledOnTouchOutside = true;
+
+ public Builder(Context context) {
+ mContext = context;
+ }
+
+ public Builder delay(int delay) {
+ mDelay = delay;
+ return this;
+ }
+
+ public Builder loadText(CharSequence loadText) {
+ mLoadText = loadText;
+ return this;
+ }
+
+ public Builder loadText(int resId) {
+ mLoadText = mContext.getString(resId);
+ return this;
+ }
+
+ public Builder cancelable(boolean cancelable) {
+ mCancelable = cancelable;
+ mCanceledOnTouchOutside = cancelable;
+ return this;
+ }
+
+ public Builder canceledOnTouchOutside(boolean canceledOnTouchOutside) {
+ mCanceledOnTouchOutside = canceledOnTouchOutside;
+ return this;
+ }
+
+ public ShapeLoadingDialog build(){
+ return new ShapeLoadingDialog(this);
+ }
- public void setCanceledOnTouchOutside(boolean cancel){
- mDialog.setCanceledOnTouchOutside(cancel);
+ public ShapeLoadingDialog show(){
+ ShapeLoadingDialog dialog = build();
+ dialog.show();
+ return dialog;
+ }
}
}
diff --git a/shapeloading/src/main/java/com/mingle/widget/ShapeLoadingView.java b/shapeloading/src/main/java/com/mingle/widget/ShapeLoadingView.java
index 7c47fa1..77c2bf1 100644
--- a/shapeloading/src/main/java/com/mingle/widget/ShapeLoadingView.java
+++ b/shapeloading/src/main/java/com/mingle/widget/ShapeLoadingView.java
@@ -8,8 +8,6 @@
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
-import android.view.animation.DecelerateInterpolator;
-import android.view.animation.Interpolator;
import com.mingle.shapeloading.R;
import com.nineoldandroids.animation.ArgbEvaluator;
@@ -19,53 +17,52 @@
* Created by zzz40500 on 15/4/4.
*/
public class ShapeLoadingView extends View {
-
-
+ /**
+ * 用赛贝尔曲线画圆
+ */
+ private static final float mMagicNumber = 0.55228475f;
private static final float genhao3 = 1.7320508075689f;
private static final float mTriangle2Circle =0.25555555f;
private Shape mShape = Shape.SHAPE_CIRCLE;
- private Interpolator mInterpolator=new DecelerateInterpolator();
+
private ArgbEvaluator mArgbEvaluator=new ArgbEvaluator();
private int mTriangleColor ;
private int mCircleColor ;
private int mRectColor ;
- /**
- * 用赛贝尔曲线画圆
- */
- private float mMagicNumber = 0.55228475f;
public ShapeLoadingView(Context context) {
super(context);
- init();
+ init(context);
}
public ShapeLoadingView(Context context, AttributeSet attrs) {
super(context, attrs);
- init();
+ init(context);
}
public ShapeLoadingView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
+ init(context);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public ShapeLoadingView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
- init();
+ init(context);
}
- private void init() {
+ private void init(Context context) {
+ mTriangleColor = getColor(context, R.color.triangle);
+ mCircleColor =getColor(context, R.color.circle);
+ mRectColor = getColor(context, R.color.rect);
mPaint = new Paint();
- mPaint.setColor(getResources().getColor(R.color.triangle));
+ mPaint.setColor(mTriangleColor);
mPaint.setAntiAlias(true);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
- setBackgroundColor(getResources().getColor(R.color.view_bg));
- mTriangleColor = getResources().getColor(R.color.triangle);
- mCircleColor = getResources().getColor(R.color.circle);
- mRectColor = getResources().getColor(R.color.triangle);
+
}
public boolean mIsLoading = false;
@@ -112,7 +109,7 @@ protected void onDraw(Canvas canvas) {
} else {
Path path = new Path();
- mPaint.setColor(getResources().getColor(R.color.triangle));
+ mPaint.setColor(mTriangleColor);
path.moveTo(relativeXFromView(0.5f), relativeYFromView(0f));
path.lineTo(relativeXFromView(1), relativeYFromView(genhao3 / 2f));
path.lineTo(relativeXFromView(0), relativeYFromView(genhao3/2f));
@@ -162,7 +159,7 @@ protected void onDraw(Canvas canvas) {
invalidate();
} else {
- mPaint.setColor(getResources().getColor(R.color.circle));
+ mPaint.setColor(mCircleColor);
Path path = new Path();
float magicNumber = mMagicNumber;
@@ -219,7 +216,7 @@ protected void onDraw(Canvas canvas) {
invalidate();
} else {
- mPaint.setColor(getResources().getColor(R.color.rect));
+ mPaint.setColor(mRectColor);
mControlX = relativeXFromView(0.5f - genhao3 / 4);
mControlY = relativeYFromView(0.75f);
Path path = new Path();
@@ -253,8 +250,12 @@ private float relativeYFromView(float percent) {
public void changeShape() {
mIsLoading = true;
+ invalidate();
+ }
-
+ public void setShape(Shape shape){
+ mIsLoading = true;
+ mShape = shape;
invalidate();
}
@@ -275,4 +276,12 @@ public void setVisibility(int visibility) {
public Shape getShape() {
return mShape;
}
+
+ private int getColor(Context context, int id) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ return context.getColor(id);
+ } else {
+ return context.getResources().getColor(id);
+ }
+ }
}
diff --git a/shapeloading/src/main/res/layout/layout_dialog.xml b/shapeloading/src/main/res/layout/layout_dialog.xml
index b9fb2cc..62e73dc 100644
--- a/shapeloading/src/main/res/layout/layout_dialog.xml
+++ b/shapeloading/src/main/res/layout/layout_dialog.xml
@@ -1,5 +1,5 @@
-
+ android:layout_height="match_parent"
+ android:clipChildren="false"
+ android:clipToPadding="false">
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/shapeloading/src/main/res/layout/load_view.xml b/shapeloading/src/main/res/layout/load_view.xml
index 9143066..77849ba 100644
--- a/shapeloading/src/main/res/layout/load_view.xml
+++ b/shapeloading/src/main/res/layout/load_view.xml
@@ -1,43 +1,32 @@
-
- android:orientation="vertical">
+
-
+
+
-
-
-
-
-
-
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="18dp"
+ android:textColor="#757575"
+ android:textSize="14sp"
+ android:visibility="gone"
+ tool:visibility="visible"/>
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/shapeloading/src/main/res/values/loading_arrt.xml b/shapeloading/src/main/res/values/loading_attr.xml
similarity index 62%
rename from shapeloading/src/main/res/values/loading_arrt.xml
rename to shapeloading/src/main/res/values/loading_attr.xml
index 3107042..20b4d48 100644
--- a/shapeloading/src/main/res/values/loading_arrt.xml
+++ b/shapeloading/src/main/res/values/loading_attr.xml
@@ -2,8 +2,8 @@
-
-
+
+
\ No newline at end of file