所以,我的問題有點類似這兩個問題:安卓的onDraw不斷呼籲或動畫彈回原來的位置
Custom View onDraw is constantly called
android: onDraw is called constantly
我有一個自定義類擴展ImageView的我將RotateAnimation應用於。動畫使用輸入的x和y座標來執行從最後一個角度到下一個角度的旋轉,以便用戶可以將ImageView從-360度變成360度。當我使用的onDraw()這個代碼一切看起來完美的屏幕(動畫設定爲在代碼下文):
@Override
protected void onDraw(Canvas canvas) {
Log.d(TAG, "It is drawn again!");
this.setAnimation(anim);
super.onDraw(canvas);
}
這裏的問題是,以同樣的方式在其他職位提到,動畫調用onDraw調用動畫等,可能通過RotateAnimation類中的invalidate()。這是否正確觀察?輸出是完美的,因爲ImageView總是停留在當前計算出的角度,但動畫調整因此繼續進行,消耗大量的功率和容量。
爲了解決這個問題,我嘗試在計算動畫參數的方法中移動this.setAnimation(anim)(請忽略isClockWise(),calculateAngleToMove()和其他非Android的東西,它們按預期工作):
private void turnWheel(){
float angle = 0;
if (isClockWise()){
angle = calculateAngleToMove();
anim = new RotateAnimation(current_angle, angle, center_x, center_y);
anim.setFillAfter(true);
anim.setFillEnabled(true);
current_angle += angle;
}
else{
angle = - calculateAngleToMove();
anim = new RotateAnimation(current_angle, angle, center_x, center_y);
anim.setFillAfter(true);
anim.setFillEnabled(true);
current_angle += angle;
}
if (current_angle > 360){
current_angle = current_angle - 360;
}
if (current_angle < -360){
current_angle = current_angle + 360;
}
this.setAnimation(anim);
this.invalidate(); //Calls onDraw()
}
這解決了問題的onDraw不斷被調用,但它創建另一:當用戶按下,保持並轉動ImageView的,它卡來回零角度和當前角度之間。當用戶放開ImageView時,它會回到零角度。當用戶不提供輸入時,總希望ImageView在變量current_angle上旋轉。我已經嘗試了anim.setFillAfter(true),anim.setFillEnabled(true),invalidate()和this.startAnimation(anim)的不同版本,但它們似乎從未對此問題產生任何影響。
哪裏是調用this.setAnimation(anim)的最佳位置?
使用RotateDrawable似乎是一個很好的解決方案,但我似乎無法弄清楚如何以編程方式做到這一點。你能提供一個例子嗎? – 2012-01-15 18:13:17
簡單的例子,應該給你所有你需要的鉤子。 – Devunwired 2012-01-15 22:36:01
工作正常,謝謝! :) – 2012-01-16 17:09:23