我有一个自定义视图,我创建了一个圆圈,在中间放置一个文本字符,并将字体设置为自定义图标字体。看起来像这样
它的代码看起来像这样
public class IconView extends TextView
{
public static final String ICON_PROJECTOR = "A";
public static final String ICON_BLURAY = "F";
public static final String ICON_TUNER = "H";
public static final String ICON_CALL = "W";
public static final String ICON_HANG_UP = "X";
public static final String ICON_SLIDERS = "l";
public static final String ICON_KEYPAD = "t";
public static final String ICON_UP = "!";
public static final String ICON_DOWN = "@";
public static final String ICON_LEFT = "#";
public static final String ICON_RIGHT = "$";
public static final String ICON_UP_ALT = "%";
public static final String ICON_DOWN_ALT = "^";
public static final String ICON_LEFT_ALT = "&";
public static final String ICON_RIGHT_ALT = "*";
public static final String ICON_MENU_BACK = "<";
public static final String ICON_MENU_FWD = ">";
private int bgColor;
public IconView(Context context, AttributeSet attrs)
{
super(context, attrs);
Typeface iconTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/hav.ttf");
this.setTypeface(iconTypeface);
}
public void setIcon(String icon)
{
this.setText(icon);
}
public void setColor(int color)
{
bgColor=color;
}
@Override
protected void onDraw(Canvas canvas)
{
int size = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics());
this.setLayoutParams(new LinearLayout.LayoutParams(size,size));
this.setGravity(Gravity.CENTER);
//Draw Background
Rect rect = canvas.getClipBounds();
Paint paint = new Paint();
paint.setColor(bgColor);
paint.setAntiAlias(true);
canvas.drawCircle(rect.centerX(), rect.centerY(), rect.width() / 2, paint);
//Set Text Color
this.setTextColor(0xFFFFFFFF);
super.onDraw(canvas);
}
}
它运行并且看起来很漂亮。不幸的是,当它运行整个应用程序滞后时,我的内存使用情况看起来像。我很确定这意味着什么东西会泄漏,而且由于我对此非常陌生,所以我不知道我的onDraw方法导致了什么。如果我在onDraw中注释掉所有东西但是super()那么我只得到带有字体的图标,没有圆圈,并且内存问题完全消失了。我得到了一个非常可靠的内存甚至行记忆,应用程序是活泼和响应。
那么我的圈子代码有什么问题,我该如何修复它,或者我应该用它替换它?
感谢您的帮助,我很感激!