Как отобразить элементы пользовательского интерфейса Android с поворотом на 180 градусов
Я хотел бы отобразить некоторые элементы пользовательского интерфейса в файле макета Android xml. Я пытаюсь создать приложение, в котором два игрока могут сидеть на каждом конце мобильного устройства и играть друг против друга.
Так что нужно показать какую-нибудь кнопку на 180 градусов повернутой.
Это возможно? Я пробовал Android: гравитация, но это не сработало.
Спасибо за помощь, Мартин
4 ответа
Я бы посоветовал вам взглянуть на эту ветку, в которой обсуждается аналогичная проблема. Даже если вопрос касается компонента TextView, Button расширяет TextView, поэтому адаптировать его к кнопке должно быть тривиально. ФП этого вопроса в конечном итоге остановился на следующем onDraw()
метод:
@Override
public void onDraw(Canvas canvas) {
//This saves off the matrix that the canvas applies to draws, so it can be restored later.
canvas.save();
//now we change the matrix
//We need to rotate around the center of our text
//Otherwise it rotates around the origin, and that's bad.
float py = this.getHeight()/2.0f;
float px = this.getWidth()/2.0f;
canvas.rotate(180, px, py);
//draw the text with the matrix applied.
super.onDraw(canvas);
//restore the old matrix.
canvas.restore();
}
Я также скажу, что я написал класс, который реализовал это onDraw()
метод, и он работал отлично.
Что вы можете сделать, это расширить представление Button и переопределить метод onDraw().
Это дает вам холст, который вы можете затем повернуть, а затем вызвать super.onDraw(), чтобы система нарисовала кнопку после ее поворота.
Так что нужно показать какую-нибудь кнопку на 180 градусов повернутой.
Извините, это не поддерживается ни одним из существующих виджетов Android.
Вы можете использовать также этот образец. Это лучше, потому что вам не нужно перемещать предметы на Y.
canvas.save();
canvas.scale(1f, -1f, super.getWidth() * 0.5f,
super.getHeight() * 0.5f);
canvas.drawBitmap(arrow,
rect.centerX() - (arrow.getWidth() * 0.5F), rect.bottom,
null);
canvas.restore();