当我点击按钮时,我有ImageView,应该飞走了。为此,我使用ObjectAnimator为TRANSLATION_Y和TRANSLATION_X属性设置动画。
我需要为我的ImageView的父级定义圆形边界,以使其正确飞行。
为此,我使用下一个代码
public class CircleFrameLayout extends FrameLayout {
private Path mClipPath = new Path();
//Constructors
@Override
protected void onDraw(Canvas canvas) {
mClipPath.reset();
float radius = Math.min((float)getMeasuredWidth() / 2f, (float)getMeasuredHeight() / 2f) + 5;
mClipPath.addCircle((float)getMeasuredWidth() / 2f, (float)getMeasuredHeight() / 2f, radius, Path.Direction.CCW);
canvas.clipPath(mClipPath);
super.onDraw(canvas);
}
}
但没有任何反应。 ImageView使用其“父”的矩形边界而不是圆形边界。
有什么问题?
答案 0 :(得分:2)
onDraw
通常不会为ViewGroup类调用(例如您的自定义FrameLayout)。为了获得您想要的行为,请改为覆盖dispatchDraw
:
private Path mClipPath = new Path();
@Override
protected void dispatchDraw(Canvas canvas) {
mClipPath.reset();
float radius = Math.min((float)getMeasuredWidth() / 2f, (float)getMeasuredHeight() / 2f) + 5;
mClipPath.addCircle((float)getMeasuredWidth() / 2f, (float)getMeasuredHeight() / 2f, radius, Path.Direction.CCW);
canvas.clipPath(mClipPath);
super.dispatchDraw(canvas);
}