Android ObjectAnimator Rotation裁剪视图

时间:2018-11-19 22:04:32

标签: canvas rotation crop objectanimator clip-path

我有一个自定义视图,该视图正在模拟带有一些文本的球的旋转。

要实现这一点,我的自定义视图(扩展了RelativeLayout)将覆盖onDraw方法:

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    mCirclePath.reset();
    mCirclePath.addCircle(canvas.getWidth() / 2, canvas.getHeight() / 2, mRadious, Path.Direction.CW);
    canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight() / 2, mRadious, mBackGroundPaint);
    canvas.drawPath(mCirclePath, mBackGroundPaint);
    canvas.clipPath(mCirclePath);
    canvas.drawColor(Color.TRANSPARENT);
}

这样,我将所有内容都裁剪到位图范围之外,从而可以在布局内移动文本。此+旋转文本可模拟假3d球的旋转。

我的解决方案在Android 4,5,6和9上都能正常工作,但在7和8上却无法正常工作。

这是我的动画的非常简化的版本,仅包含视图旋转部分:

ObjectAnimator anim =  ObjectAnimator.ofFloat(this, View.ROTATION, 0, 190);
anim.setDuration(6000);

在Android 7和8中,似乎位图和文本视图在旋转,但是容器保持静态。这在其他Android版本中完美工作... enter image description here

我已经尝试过移动相机位置而没有成功。

Edit1:因此,在弄乱了一段时间之后,我发现罪魁祸首是clipPath,这在某种程度上与Object动画制作者的旋转冲突。我现在发现的“解决方案”是将LayerType设置为View.LAYER_TYPE_SOFTWARE。但是我对此解决方案不满意,因为由于这是一个复合视图,并且我同时在对文本进行动画处理,因此该层将继续无效...

0 个答案:

没有答案