我试图在不使用 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);
}
}
通过使用坐标,这似乎非常具体。 是否有更好的方法可以不必使用坐标来实现?
编辑:
这是我到目前为止所拥有的。 这个家伙是与红色帽子分开的图像。
如果您打算动态添加该ImageView
,则无法在未分配像素轴的情况下放置这些图像
自定义类中的一个问题是,永远decodeResource
在onDraw
方法中对它进行多次解码,否则会导致严重的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);
}
}