如何将参数从 Android 中的主活动传递给 SurfaceView



我需要使用 surfaceview 绘制线条图,因此从 Main 活动中,我将按照此 [link][1] 解决方案将 2 个参数传递给 Surfaceview

[1]:通过构造函数将参数传递给 SurfaceView,但我在 surfaceview 绘制方法中传递的参数仍然是 0,请帮助

MySurfaceView.java: 私人国际,θ;

public void setParameter(int length, int angle){
this.len = length;
this.theta = angle;
System.out.println("inside setParameter, len: "+len+" ,theta: "+theta);
}
protected void drawSomething(Canvas canvas) {
System.out.println("Inside drawSomething() , len: "+len+" ,theta: "+theta);
canvas.drawColor(Color.WHITE);

} 主活动.java

MySurfaceView myView = new MySurfaceView(MainActivity.this);
myView.setParameter(90,30);
myView.invalidate();

值只打印在setParameter((内部,而不是在drawSomething((中打印,我需要在drawSomething((中使用这些值,请帮助 在下面编辑了我的代码,

public MySurfaceView(Context context) {
super(context);
init();
}
private void init(){
paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStrokeWidth(3);
paint.setStyle(Paint.Style.STROKE);
surfaceHolder = getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback(){
@Override
public void surfaceCreated(SurfaceHolder holder) {
canvas = holder.lockCanvas(null);
drawSomething(canvas);
holder.unlockCanvasAndPost(canvas);
}
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}});
}

由于drawSomething(canvas)是在回调中调用的,因此您无法知道它是否会在下一个函数setParameter(int, int)之前被调用。

如果你想让这些值可用于drawSomething(canvas),你必须在MySurfaceView的构造函数中传递它们,或者扩展类SurfaceHolder.Callback并将值传递给这些值。

最新更新