i am using this BadgeView class to create badge in calendar event date..first time its run but when goes to next month BadgeView class it gives stackoverflow error.. badgeView class calling by this and badge appy on linearlayout
badge = new BadgeView(context, event_dateview_layout);
badge.setText("" + eventno.size());
Log.d("aa", "eventno:" + eventno);
badge.show();
BadgeView.java
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RoundRectShape;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewParent;
import android.widget.FrameLayout;
import android.widget.TextView;
public class BadgeView extends TextView {
private Context context;
private View target;
private ShapeDrawable badgeBg;
public BadgeView(Context context, View target) {
this(context, null, android.R.attr.textViewStyle, target);
}
public BadgeView(Context context, AttributeSet attrs, int defStyle, View target) {
super(context, attrs, defStyle);
init(context, target);
}
private void init(Context context, View target) {
this.context = context;
this.target = target;
//apply defaults
setTypeface(Typeface.DEFAULT_BOLD);
setPadding(7, 0, 7, 0);
setTextColor(Color.WHITE);
if (this.target != null) {
applyTo(this.target);
} else {
show();
}
}
private void applyTo(View target) {
LayoutParams lp = target.getLayoutParams();
ViewParent parent = target.getParent();
FrameLayout container = new FrameLayout(context);
// TODO verify that parent is indeed a ViewGroup
ViewGroup group = (ViewGroup) parent;
int index = group.indexOfChild(target);
group.removeView(target);
group.addView(container, index, lp);
container.addView(target);
container.addView(this);
group.invalidate();
}
public void show() {
if (getBackground() == null) {
if (badgeBg == null) {
badgeBg = getDefaultBackground();
}
setBackgroundDrawable(badgeBg);
}
applyLayoutParams();
}
private ShapeDrawable getDefaultBackground() {
float[] outerR = new float[]{20, 20, 20, 20, 20, 20, 20, 20};
RoundRectShape rr = new RoundRectShape(outerR, null, null);
ShapeDrawable drawable = new ShapeDrawable(rr);
drawable.getPaint().setColor(Color.RED);
return drawable;
}
private void applyLayoutParams() {
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.gravity = Gravity.RIGHT | Gravity.TOP;
setLayoutParams(lp);
}
java.lang.StackOverflowError
at android.view.HardwareCanvas.<init>(HardwareCanvas.java:29)
at android.view.GLES20Canvas.<init>(GLES20Canvas.java:100)
at android.view.GLES20RecordingCanvas.<init>(GLES20RecordingCanvas.java:62)
at android.view.GLES20RecordingCanvas.<init>(GLES20RecordingCanvas.java:38)
at android.view.GLES20RecordingCanvas$1.newInstance(GLES20RecordingCanvas.java:46)
at android.view.GLES20RecordingCanvas$1.newInstance(GLES20RecordingCanvas.java:44)
at android.util.FinitePool.acquire(FinitePool.java:69)
at android.util.SynchronizedPool.acquire(SynchronizedPool.java:39)
at android.view.GLES20RecordingCanvas.obtain(GLES20RecordingCanvas.java:66)
at android.view.GLES20DisplayList.start(GLES20DisplayList.java:67)
at android.view.View.getDisplayList(View.java:12682)
at android.view.View.getDisplayList(View.java:12768)
at android.view.View.draw(View.java:13502)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.getDisplayList(View.java:12722)
at android.view.View.getDisplayList(View.java:12768)
at android.view.View.draw(View.java:13502)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.getDisplayList(View.java:12722)
at android.view.View.getDisplayList(View.java:12768)
at android.view.View.draw(View.java:13502)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.getDisplayList(View.java:12722)
at android.view.View.getDisplayList(View.java:12768)
at android.view.View.draw(View.java:13502)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.getDisplayList(View.java:12722)
at android.view.View.getDisplayList(View.java:12768)
at android.view.View.draw(View.java:13502)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.getDisplayList(View.java:12722)
at android.view.View.getDisplayList(View.java:12768)
at android.view.View.draw(View.java:13502)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.getDisplayList(View.java:12722)
at android.view.View.getDisplayList(View.java:12768)
at android.view.View.draw(View.java:13502)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.getDisplayList(View.java:12722)
at android.view.View.getDisplayList(View.java:12768)
at android.view.View.draw(View.java:13502)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.getDisplayList(View.java:12722)
at android.view.View.getDisplayList(View.java:12768)
at android.view.View.draw(View.java:13502)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.getDisplayList(View.java:12722)
at android.view.View.getDisplayList(View.java:12768)
at android.view.View.draw(View.java:13502)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.getDisplayList(View.java:12722)
at android.view.View.getDisplayList(View.java:12768)
at android.view.View.draw(View.java:13502)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.getDisplayList(View.java:12722)
at android.view.View.getDisplayList(View.java:12768)
at android.view.View.draw(View.java:13502)
at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
at android.view.View.getDisplayList(View.