0

Androidでアニメーション化されたカスタムビューを作成しようとしていますが、ビューオブジェクトのメンバー変数に問題があります。invalidate()を実行すると、変数が再初期化されます。

これは、温度計と呼ばれるカスタムビューで取得しました

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変数が変更されないのはなぜですか?直し方?

よろしくお願いします!

4

1 に答える 1

1

Thermometermain.xmlレイアウトにが含まれていると思いますか?

Thermometer次のように、レイアウトで設定したにアクセスする必要があります。

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

50に設定しているのThermometerは、実際に画面に描画されるものではありません。

于 2012-04-20T13:39:44.583 に答える