Android使用大量内存在自定义视图中绘制圆圈

时间:2015-10-01 23:03:42

标签: android

我有一个自定义视图,我创建了一个圆圈,在中间放置一个文本字符,并将字体设置为自定义图标字体。看起来像这样

enter image description here

它的代码看起来像这样

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);
}
}

它运行并且看起来很漂亮。不幸的是,当它运行整个应用程序滞后时,我的内存使用情况看起来像memory。我很确定这意味着什么东西会泄漏,而且由于我对此非常陌生,所以我不知道我的onDraw方法导致了什么。如果我在onDraw中注释掉所有东西但是super()那么我只得到带有字体的图标,没有圆圈,并且内存问题完全消失了。我得到了一个非常可靠的内存甚至行记忆,应用程序是活泼和响应。

那么我的圈子代码有什么问题,我该如何修复它,或者我应该用它替换它?

感谢您的帮助,我很感激!

0 个答案:

没有答案