Open lozn00 opened 2 years ago
what do you mean exactly?
我已经解决了,继承了改类,把封闭的必须xml设置的改成支持java new方式实现
i had solved ,copy src code modiy attr ,use java code new class and setting style
and delete throw new IllegalArgumentException("this d must be instanceof Sprite");,
/**
* Created by ybq.
*/
public class SpinKitView extends ProgressBar {
private Style mStyle;
private int mColor;
private Sprite mSprite;
public SpinKitView(Context context, Style mStyle, int mColor) {
super(context);
this.mStyle = mStyle;
this.mColor = mColor;
init();
}
public SpinKitView(Context context) {
this(context, null);
}
public SpinKitView(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.SpinKitViewStyle);
}
public SpinKitView(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, R.style.SpinKitView);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public SpinKitView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
first(context, attrs, defStyleAttr, defStyleRes);
}
private void first(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SpinKitView, defStyleAttr,
defStyleRes);
mStyle = Style.values()[a.getInt(R.styleable.SpinKitView_SpinKit_Style, 0)];
mColor = a.getColor(R.styleable.SpinKitView_SpinKit_Color, Color.WHITE);
a.recycle();
init();
}
protected void init() {
Sprite sprite = SpriteFactory.create(mStyle);
sprite.setColor(mColor);
setIndeterminateDrawable(sprite);
setIndeterminate(true);
}
@Override
public void setIndeterminateDrawable(Drawable d) {
if (!(d instanceof Sprite)) {//可能是代码设置的。
// throw new IllegalArgumentException("this d must be instanceof Sprite");
return;
}
setIndeterminateDrawable((Sprite) d);
}
public void setIndeterminateDrawable(Sprite d) {
super.setIndeterminateDrawable(d);
mSprite = d;
if (mSprite.getColor() == 0) {
mSprite.setColor(mColor);
}
onSizeChanged(getWidth(), getHeight(), getWidth(), getHeight());
if (getVisibility() == VISIBLE) {
mSprite.start();
}
}
@Override
public Sprite getIndeterminateDrawable() {
return mSprite;
}
public void setColor(int color) {
this.mColor = color;
if (mSprite != null) {
mSprite.setColor(color);
}
invalidate();
}
@Override
public void unscheduleDrawable(Drawable who) {
super.unscheduleDrawable(who);
if (who instanceof Sprite) {
((Sprite) who).stop();
}
}
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
super.onWindowFocusChanged(hasWindowFocus);
if (hasWindowFocus) {
if (mSprite != null && getVisibility() == VISIBLE) {
mSprite.start();
}
}
}
@Override
public void onScreenStateChanged(int screenState) {
super.onScreenStateChanged(screenState);
if (screenState == View.SCREEN_STATE_OFF) {
if (mSprite != null) {
mSprite.stop();
}
}
}
}
i need java code add view