我正在尝试在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变量不会改变?怎么解决?
非常感谢提前!
答案 0 :(得分:1)
我假设你的main.xml布局中有Thermometer
?
您需要访问在布局中设置的Thermometer
,如下所示:
Thermometer therm = (Thermometer) findViewById(R.id.thermo);
therm.setHandTarget(50);
您设置为50的Thermometer
不是屏幕上实际绘制的{{1}}。