我們創建了一個ImageView,其中包含風力渦輪機的旋轉部分,並對其應用旋轉動畫,然後添加一個SeekBar(滑塊),允許用戶更改旋轉刀片。在旋轉動畫過程中平滑調整ImageView大小
我們嘗試了一堆不同的解決方法,但它們都有問題。下面是我們目前SeekBarListener:
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
// ImageView handle
final ImageView part_imageView = (ImageView) view_final.findViewById(R.id.part_imageView);
// When progress changes, change size of blades
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
part_imageView.getLayoutParams().height = 300 + (2 * progress);
part_imageView.getLayoutParams().width = 300 + (2 * progress);
part_imageView.getAnimation().reset();
seekBar_text.setText(part_name + " size : " + (progress + 1));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
,這裏是相關的動畫XML(聽衆之前應用於part_imageView啓用)。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<rotate
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:duration="4000" />
</set>
我們試圖只改變了onProgressChanged的ImageView的寬度和高度,但這並沒有更新的動畫和動畫它周圍的不再是在中心軸的第一件事(我的猜測是,它將樞軸點轉換爲固定位置,而不是連續計算)。
接下來,我們嘗試使用part_imageView.setPivotX(50);
重置樞軸點,對Y也是如此,但這對旋轉沒有任何影響,但它仍然是離軸旋轉。
接下來我們試着重新應用動畫,但是這會將旋轉重置到其起始點,這是不理想的,並且看起來很痙攣。
接下來,我嘗試了onProgressChanged中的當前內容,更改大小後調用part_imageView.getAnimation().reset();
。這使得當前位置保持旋轉狀態(良好),但是在每次條形變化時,在旋轉開始時閃爍一幀圖像(壞)。由於SeekBar非常連續(100種設置),圖像幾乎在我們改變尺寸的整個時間都閃爍,這看起來很可怕。
我們希望能夠在不中斷動畫的情況下平滑地更改ImageView的大小。有沒有更好的方法來解決這個問題或快速解決?
使用'RotateDrawable':它使用動態樞紐計算繪圖時(這是不固定的調整您的ImageView後) – pskink
我試圖用一個RotateDrawable,但它不旋轉,只是加載drawable。你知道我如何讓它動畫? 我也嘗試使用動畫旋轉,但這是非常波濤洶涌(約8幀/旋轉),但它否則表現我想要它。 –
您需要使用ObjectAnimator並將目標對象設置爲您的可繪製對象,將「level」作爲屬性並且值介於0..10000之間 – pskink