Skip to content

Commit

Permalink
Fix Android multiple spinner issue
Browse files Browse the repository at this point in the history
  • Loading branch information
wkh237 committed Nov 6, 2016
1 parent 4a7b9e2 commit 092c741
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 73 deletions.
89 changes: 16 additions & 73 deletions android/src/main/java/com/react/rnspinkit/RNSpinkit.java
Original file line number Diff line number Diff line change
@@ -1,32 +1,18 @@
package com.react.rnspinkit;


import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.RotateDrawable;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;

import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.*;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.ViewManager;
import com.github.ybq.android.spinkit.SpinKitView;
import com.facebook.react.uimanager.annotations.ReactProp;
import com.facebook.react.views.view.ReactViewGroup;
import com.github.ybq.android.spinkit.SpinKitView;
import com.github.ybq.android.spinkit.sprite.Sprite;
import com.github.ybq.android.spinkit.style.ChasingDots;
import com.github.ybq.android.spinkit.style.Circle;
Expand All @@ -40,13 +26,17 @@
import com.github.ybq.android.spinkit.style.WanderingCubes;
import com.github.ybq.android.spinkit.style.Wave;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
* Created by suzuri04x2 on 2016/5/10.
*/
public class RNSpinkit extends SimpleViewManager<SpinKitView> {
public class RNSpinkit extends SimpleViewManager<RNSpinkitView> {

ReactApplicationContext mContext;
Sprite mSprite = getSprite("");

double mSize = 48;

public RNSpinkit(ReactApplicationContext reactContext) {
Expand All @@ -59,79 +49,32 @@ public String getName() {
}

@Override
protected SpinKitView createViewInstance(ThemedReactContext reactContext) {
return new SpinKitView(reactContext);
protected RNSpinkitView createViewInstance(ThemedReactContext reactContext) {
return new RNSpinkitView(reactContext);
}

@ReactProp(name = "isVisible")
public void setIsVisible(SpinKitView view, @Nullable Boolean visible) {
public void setIsVisible(RNSpinkitView view, @Nullable Boolean visible) {
if(visible)
view.setVisibility(View.VISIBLE);
else
view.setVisibility(View.INVISIBLE);
}

@ReactProp(name = "color")
public void setColor(SpinKitView view, @Nullable String color) {
try {
mSprite.setColor(Color.parseColor(color));
view.setIndeterminateDrawable(mSprite);
} catch(Exception err) {
Log.e("RNSpinkit-Err", err.toString() + "when set prop color to " + color);
}
public void setColor(RNSpinkitView view, @Nullable String color) {
view.setSpriteColor(color);
}

@ReactProp(name = "size")
public void setSize(SpinKitView view, @Nullable double size) {
mSize = size;
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(params);
public void setSize(RNSpinkitView view, @Nullable double size) {
view.setSpriteSize(size);
}

@ReactProp(name = "type")
public void setType(SpinKitView view, @Nullable String spinnerType) {
Sprite sprite = getSprite(spinnerType);
sprite.setColor(mSprite.getColor());
mSprite = sprite;
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(params);
view.setIndeterminateDrawable(sprite);
}
public void setType(RNSpinkitView view, @Nullable String spinnerType) {
view.setSpriteType(spinnerType);

private Sprite getSprite(String spinnerType) {
switch (spinnerType) {
case "Bounce" :
return new DoubleBounce();
case "Wave" :
return new Wave();
case "RotatingPlane" :
return new RotatingPlane();
case "WanderingCubes":
return new WanderingCubes();
case "9CubeGrid":
return new CubeGrid();
case "FadingCircleAlt" :
return new FadingCircle();
case "Pulse" :
return new Pulse();
case "ChasingDots":
// Add scale factor to prevent clipping
Sprite d = new ChasingDots();
d.setScale(0.85f);
return d;
case "ThreeBounce":
return new ThreeBounce();
case "Circle":
return new Circle();
case "FoldingCube":
// Add scale factor to prevent clipping
Sprite sprite = new FoldingCube();
sprite.setScale(0.70f);
return sprite;
default :
break;
}
return new RotatingPlane();
}

}
99 changes: 99 additions & 0 deletions android/src/main/java/com/react/rnspinkit/RNSpinkitView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package com.react.rnspinkit;

import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.ViewGroup;
import android.widget.RelativeLayout;

import com.github.ybq.android.spinkit.SpinKitView;
import com.github.ybq.android.spinkit.sprite.Sprite;
import com.github.ybq.android.spinkit.style.ChasingDots;
import com.github.ybq.android.spinkit.style.Circle;
import com.github.ybq.android.spinkit.style.CubeGrid;
import com.github.ybq.android.spinkit.style.DoubleBounce;
import com.github.ybq.android.spinkit.style.FadingCircle;
import com.github.ybq.android.spinkit.style.FoldingCube;
import com.github.ybq.android.spinkit.style.Pulse;
import com.github.ybq.android.spinkit.style.RotatingPlane;
import com.github.ybq.android.spinkit.style.ThreeBounce;
import com.github.ybq.android.spinkit.style.WanderingCubes;
import com.github.ybq.android.spinkit.style.Wave;

/**
* Created by wkh237 on 2016/11/6.
*/

public class RNSpinkitView extends SpinKitView{

private int mColor;
private Sprite mSprite = getSprite("");
private String mType;
private double mSize;

public RNSpinkitView(Context context) {
super(context);
}

public void setSpriteColor(String color) {
try {
mColor = Color.parseColor(color);
this.mSprite.setColor(mColor);
this.setIndeterminateDrawable(mSprite);
} catch(Exception err) {
Log.e("RNSpinkit-Err", err.toString() + "when set prop color to " + color);
}
}

public void setSpriteType(String type){
mType = type;
mSprite = this.getSprite(type);
mSprite.setColor(mColor);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
this.setLayoutParams(params);
this.setIndeterminateDrawable(mSprite);
}

private Sprite getSprite(String spinnerType) {
switch (spinnerType) {
case "Bounce" :
return new DoubleBounce();
case "Wave" :
return new Wave();
case "RotatingPlane" :
return new RotatingPlane();
case "WanderingCubes":
return new WanderingCubes();
case "9CubeGrid":
return new CubeGrid();
case "FadingCircleAlt" :
return new FadingCircle();
case "Pulse" :
return new Pulse();
case "ChasingDots":
// Add scale factor to prevent clipping
Sprite d = new ChasingDots();
d.setScale(0.85f);
return d;
case "ThreeBounce":
return new ThreeBounce();
case "Circle":
return new Circle();
case "FoldingCube":
// Add scale factor to prevent clipping
Sprite sprite = new FoldingCube();
sprite.setScale(0.70f);
return sprite;
default :
break;
}
return new RotatingPlane();
}


public void setSpriteSize(double size) {
mSize = size;
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
this.setLayoutParams(params);
}
}

0 comments on commit 092c741

Please sign in to comment.