Android:构建2D头像自定义的最佳实践

时间:2014-08-20 20:23:44

标签: android android-custom-view custom-view avatar

我正在尝试在Android应用中创建一个 2D头像定制器,而不使用游戏引擎

我基本上会将PNG图像作为基础开始。然后我想在基础上层叠其他图像来自定义角色。

创建此选项的最佳选择是什么?我已经创建了自定义ImageView并覆盖了onDraw()

public class AvatarView extends ImageView {

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

public AvatarView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public AvatarView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.battle_run_char), 0, 70, null);
    canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.red_cartoon_hat), 70, 0, null);
}

}

使用坐标看起来非常具体。如果不使用坐标,是否有更好的方法来实现这一目标?

编辑:

这是我到目前为止所拥有的。这家伙是红帽子的独立图像。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您打算动态添加ImageView,那么无法在不指定像素轴的情况下放置这些图像

自定义类中的一个问题是decodeResource方法中onDraw不会多次调用它,它会导致big lag problem,而是在其中创建一个init方法你的AvatarView并对其进行解码,并在所有构造函数中调用该init方法。

<强>样品:

public class AvatarView extends ImageView {

private Bitmap body;
private Bitmap hat;
public AvatarView(Context context) {
    super(context);
    init();
}

public AvatarView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public AvatarView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
}

private void init()
{
  body = getResources(), R.drawable.battle_run_char);
  hat = getResources(), R.drawable.red_cartoon_hat);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawBitmap(BitmapFactory.decodeResource(body , 0, 70, null);
    canvas.drawBitmap(BitmapFactory.decodeResource(hat , 70, 0, null);
}

}