我目前正在使用surfaceview进行一个简单的游戏,但我发现很难在android中以编程方式将相对布局中的按钮或文本放置。例如,在下面的示例中,我使用相对布局中的文本设置relativelayouts,我想将其设置在屏幕的右侧,右边几个边距。我应该如何理解我在哪里定位内容?是否有一些关于以编程方式定位内容的提示?
RelativeLayout Rs = new RelativeLayout(this);
Rs.setBackgroundResource(R.drawable.btn);
Rs.setGravity(Gravity.CENTER);
Regame.addView(RR,400,150);
Rs.setX(0);
txt= new TextView(this);
答案 0 :(得分:1)
我想如果你从surfaceView中访问画布就足够了。如果你使用onSizeChange,会更有效率 对于宽度和高度,但我猜画布getWidth和getHeight就足够了。另外我的例子只是绘制一旦表面创建,你将必须制作自己的更新逻辑。我也放弃了相对布局,但我认为这可满足您的需求:
public class GameView extends SurfaceView {
protected SurfaceHolder holder;
public GameView(Context context) {
super(context);
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
Canvas c = holder.lockCanvas(null);
onDraw(c);
holder.unlockCanvasAndPost(c);
}
});
}
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setTextSize(20);
int width=canvas.getWidth();
int height=canvas.getHeight();
//Just for example
int desiredHeight=height/2;
int desiredMargin=10;
String desiredText="Some text";
int textWidth=Math.round(paint.measureText(desiredText));
int desiredWidth=width-textWidth-desiredMargin;
canvas.drawText(desiredText, desiredWidth,desiredHeight, paint);
}
}