1
我有一個自定義視圖,我實現了onDraw,並且它成功地繪製了背景以及右上角的一個小覆蓋圖像。我是動畫疊加圖像(AnimationSet與ScaleAnimation和旋轉動畫)做手工:ScaleAnimation自定義視圖越來越剪輯
final AnimationSet animationSet = new AnimationSet(false);
animationSet.addAnimation(scaleAnimation);
animationSet.addAnimation(rotationAnimation);
animationSet.setFillAfter(true);
post(new Runnable() {
@Override
public void run() {
animationSet.start();
new Handler().post(getAnimationRunnable(animationSet));
}
private Runnable getAnimationRunnable (final AnimationSet animationSet) {
return new Runnable() {
@Override
public void run() {
final Transformation outTransformation = new Transformation();
if (animationSet.getTransformation(System.currentTimeMillis(), outTransformation)) {
// store matrix for applying in onDraw
mMatrix = outTransformation.getMatrix();
// THIS INVALIDATE DOESN'T WORK
parent.invalidate(new Rect(getParentInvalidateRect()));
post(getAnimationRunnable(animationSet));
}
}
};
}
});
如果我失效自定義視圖這樣的...
// THIS INVALIDATE DOES WORK
invalidate(getOverlayClientRect());
那麼動畫時,一切都除了動畫形象現在已經被剪輯 - 因爲它正在被放大,超出了頂部和右邊界。
但是,當我將Rect傳遞給與自定義視圖的右上角區域相交的parent.invalidate()時,它不會觸發自定義View的onDraw。
所以......
- 將這種做法的工作?
- 如果是這樣,是否有任何其他因素比Rect傳遞給parent.invalidate(),它確定是否會調用自定義Views onDraw方法?
感謝您的大量研究。我在這裏看到同樣的問題,從我可以告訴問題是,對於縮放視圖,Android會錯誤地計算需要重繪的區域。 Android錯誤地剪切了之前的寬度和/或高度和縮放的之間的任何東西。將clipChildren設置爲false是一種我不會推薦的方法(因爲您已經看到它有副作用)。如果你以另一種方式解決了這個問題,請讓我知道,因爲我目前還不知道如何解決這個問題,如果可以完成的話。 –