2012-04-20 3 views
0

Android에서 애니메이션 사용자 정의보기를 만들려고하지만 뷰 객체 멤버 변수에 문제가 있습니다. invalidate()를 실행하면 변수가 다시 초기화됩니다.Android에서 사용자 정의보기 및 멤버 변수

나는 온도계

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; 
} 

라는 내 사용자 정의보기에이있어 그리고 내가 응용 프로그램을 실행하면 내가

setHandTarget을 얻을

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

    setContentView(R.layout.main); 

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

내 주요 활동이있다!

handTarget = 50.0

된 onDraw

handNeedsToMove ?? 40.0 - 40.0

하지만 내가 기대하는 것은 handNeedsToMove를 얻는 것입니다. ?? 40.0 - 50.0. 왜 handTarget 변수가 변경되지 않습니까? 어떻게 고치는 지?

미리 감사드립니다.

답변

1

main.xml 레이아웃에 Thermometer이 있다고 가정합니다.

는이 같은, 당신은 당신의 레이아웃에서 설정 한 Thermometer에 액세스해야합니다

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

당신이 50에 설정하고있는 Thermometer은 실제로 화면에 그려진 하나입니다.

+0

Ah ofc! 고마움 백만 : D 조 – daker