Вращение представления в Android

android view rotation

111571 просмотра

9 ответа

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

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

Автор: Matthew Источник Размещён: 12.11.2019 09:19

Ответы (9)


66 плюса

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

Автор: Jens Zalzala Размещён: 08.03.2012 11:36

58 плюса

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

    // 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's 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);
Автор: Pete Размещён: 28.09.2011 10:04

46 плюса

Расширьте 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();

} 
Автор: Ichorus Размещён: 19.12.2009 03:15

26 плюса

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

myCusstomView.setRotation(45);

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

Автор: Rudi Размещён: 22.11.2013 06:55

24 плюса

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


<View
    android:rotation="45"
    ... />
Автор: Michael Размещён: 14.09.2015 05:36

20 плюса

Применение анимации вращения (без продолжительности, то есть без эффекта анимации) является более простым решением, чем вызов метода 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);
Автор: DYS Размещён: 26.02.2014 06:03

7 плюса

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

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

введите описание изображения здесь

Автор: Dmitry Ryadnenko Размещён: 26.03.2014 11:23

6 плюса

Присоединяйтесь к ответам Руди и Пита. Я создал 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)

Автор: Michael S Размещён: 04.01.2014 04:16

1 плюс

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

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

canvas.save();
canvas.rotate(theta, pivot.x, pivot.y);
canvas.drawRect(horizontalRect, paint);
canvas.restore();
Автор: gauravjain0102 Размещён: 26.12.2011 11:03
Вопросы из категории :
32x32