Подтвердить что ты не робот

Поворот в Android

У меня есть кнопка, которую я хочу поставить под углом 45 градусов. По какой-то причине я не могу заставить это работать.

Может кто-нибудь запросит код для этого?

4b9b3361

Ответ 1

API 11 добавил метод setRotation() ко всем представлениям.

Ответ 2

Вы можете создать анимацию и применить ее к виду на панели. Например:

    // Locate view
    ImageView diskView = (ImageView) findViewById(R.id.imageView3);

    // Create an animation instance
    Animation an = new RotateAnimation(0.0f, 360.0f, pivotX, pivotY);

    // Set the animation parameters
    an.setDuration(10000);               // duration in ms
    an.setRepeatCount(0);                // -1 = infinite repeated
    an.setRepeatMode(Animation.REVERSE); // reverses each repeat
    an.setFillAfter(true);               // keep rotation after animation

    // Aply animation to image view
    diskView.setAnimation(an);

Ответ 3

Расширьте класс TextView и переопределите метод onDraw(). Убедитесь, что родительский вид достаточно велик, чтобы обрабатывать вращающуюся кнопку без ее отсечения.

@Override
protected void onDraw(Canvas canvas) {
     canvas.save();
     canvas.rotate(45,<appropriate x pivot value>,<appropriate y pivot value>);
     super.onDraw(canvas);
     canvas.restore();

} 

Ответ 4

Я просто использовал простую строку в своем коде, и она работает:

myCusstomView.setRotation(45);

Надеюсь, это сработает для вас.

Ответ 5

Применение анимации вращения (без продолжительности, без эффекта анимации) является более простым решением, чем вызов метода View.setRotation() или переопределение метода View.onDraw.

// substitude deltaDegrees for whatever you want
RotateAnimation rotate = new RotateAnimation(0f, deltaDegrees, 
    Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);  

// prevents View from restoring to original direction. 
rotate.setFillAfter(true); 

someButton.startAnimation(rotate);

Ответ 6

Одна строка в XML


<View
    android:rotation="45"
    ... />

Ответ 7

Ответы Joininig @Rudi и @Pete. Я создал RotateAnimation, который также сохраняет функции кнопок после вращения.

Метод setRotation() сохраняет функциональность кнопок.

Пример кода:

Animation an = new RotateAnimation(0.0f, 180.0f, mainLayout.getWidth()/2, mainLayout.getHeight()/2);

    an.setDuration(1000);              
    an.setRepeatCount(0);                     
    an.setFillAfter(false);              // DO NOT keep rotation after animation
    an.setFillEnabled(true);             // Make smooth ending of Animation
    an.setAnimationListener(new AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {}

        @Override
        public void onAnimationRepeat(Animation animation) {}

        @Override
        public void onAnimationEnd(Animation animation) {
                mainLayout.setRotation(180.0f);      // Make instant rotation when Animation is finished
            }
            }); 

mainLayout.startAnimation(an);

mainLayout - это поле (LinearLayout)

Ответ 8

Вращающийся вид с rotate() не повлияет на размер измеренного размера. Возникает только просмотр рендеринга, и в результате вращающееся представление сделает его обрезанным или не вписывается в родительский макет. Эта библиотека исправляет это, хотя:

https://github.com/rongi/rotate-layout

enter image description here

Ответ 9

@Ichorus ответ правильный для просмотров, но если вы хотите нарисовать повернутые прямоугольники или текст, вы можете сделать следующее в обратном вызове onDraw (или onDispatchDraw) для вашего представления:

(обратите внимание, что theta - это угол от оси x желаемого вращения, ось вращения - точка, которая представляет точку, вокруг которой мы хотим, чтобы прямоугольник вращался, а horizontalRect - прямое положение "до того, как оно было повернуто)

canvas.save();
canvas.rotate(theta, pivot.x, pivot.y);
canvas.drawRect(horizontalRect, paint);
canvas.restore();