Android ObjectAnimator Rotation обрезает вид - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть пользовательское представление, которое имитирует вращение шара с некоторым текстом.

Для этого мое пользовательское представление (которое расширяет 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);
}

Таким образом, я обрезаю все, что находится за пределами растровой окружности, что позволяет мне перемещать текст внутри макета.this + вращение текста имитирует вращение шара в фальшивом 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, каким-то образом это конфликтует с вращением аниматора объектов.«Решение», которое я нашел на данный момент, - установить LayerType в View.LAYER_TYPE_SOFTWARE.Но я не доволен этим решением, потому что, поскольку это составное представление, и в то же время я анимирую текст, слой будет продолжать аннулировать ...

...