Android中的自定义视图和成员变量

时间:2012-04-20 13:16:45

标签: android android-animation android-custom-view

我正在尝试在Android中创建动画自定义视图,但我遇到了视图对象成员变量的问题。在我运行invalidate()之后,变量会重新初始化。

我在我的自定义视图中得到了这个名为Thermometer

private float handTarget = 40;

public void setHandTarget(float temperature) {
    Log.e(TAG, "setHandTarget!");
    handTarget = temperature;
    Log.e(TAG, "handTarget="+handTarget);
    handInitialized = true;
    invalidate();
}

@Override
protected void onDraw(Canvas canvas) {
    Log.e(TAG,"onDraw");
    drawBackground(canvas);

    float scale = (float) getWidth();       
    canvas.save(Canvas.MATRIX_SAVE_FLAG);
    canvas.scale(scale, scale);

    drawHand(canvas);

    canvas.restore();


    if (handNeedsToMove()) {
        moveHand();
    }

}
private boolean handNeedsToMove() {
    Log.e(TAG,"handNeedsToMove?? "+handPosition+" - "+handTarget);
    return Math.abs(handPosition - handTarget) > 0.01f;
}

然后我在我的主要活动中有这个

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    Thermometer therm = new Thermometer(this);
    therm.setHandTarget(50);
}

当我运行应用程序时,我得到了

setHandTarget!

handTarget = 50.0

的onDraw

handNeedsToMove ?? 40.0 - 40.0

但我期望得到handNeedsToMove? 40.0 - 50.0。为什么handTarget变量不会改变?怎么解决?

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

我假设你的main.xml布局中有Thermometer

您需要访问在布局中设置的Thermometer,如下所示:

Thermometer therm = (Thermometer) findViewById(R.id.thermo);
therm.setHandTarget(50);

您设置为50的Thermometer不是屏幕上实际绘制的{{1}}。