我正在尝试在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);
}
}
使用坐标看起来非常具体。如果不使用坐标,是否有更好的方法来实现这一目标?
编辑:
这是我到目前为止所拥有的。这家伙是红帽子的独立图像。
答案 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);
}
}