Android:建立2D头像定制的最佳做法

问题描述 投票:0回答:1

我试图在不使用 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);
}

}

通过使用坐标,这似乎非常具体。 是否有更好的方法可以不必使用坐标来实现?

编辑:

这是我到目前为止所拥有的。 这个家伙是与红色帽子分开的图像。

在此处输入图片说明

android android-custom-view custom-view avatar
1个回答
1
投票

如果您打算动态添加该ImageView ,则无法在未分配像素轴的情况下放置这些图像

自定义类中的一个问题是,永远decodeResourceonDraw方法中对它进行多次解码,否则会导致严重的big lag problem ,而是在AvatarView创建一个init方法并对其进行解码,然后在所有方法中调用该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);
}

}
© www.soinside.com 2019 - 2024. All rights reserved.