У сканера есть метод, называемый hasNext ():
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())
{
System.out.println(scanner.nextInt());
}
Вы вызываете getWidth()
слишком рано. Размер пользовательского интерфейса еще не определен и не размещен на экране.
В любом случае, я сомневаюсь, что вы хотите делать то, что делаете — анимированные виджеты не меняют области, на которые можно нажимать, поэтому кнопка по-прежнему будет реагировать на клики в исходной ориентации независимо от того, как она повернута.
При этом вы можете использовать ресурс измерения для определения размера кнопки, а затем ссылаться на этот ресурс измерения из файла макета и исходного кода, чтобы избежать этой проблемы.
Возможно, это помогает кому-то:
Создают дополнительную функцию для имени файла класса
Представления: ViewExt.kt
fun View.afterLayout(what: () -> Unit) {
if(isLaidOut) {
what.invoke()
} else {
viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
viewTreeObserver.removeOnGlobalLayoutListener(this)
what.invoke()
}
})
}
}
Это может затем использоваться на любом представлении с:
view.afterLayout {
do something with view.height
}
AndroidX имеет несколько дополнительных функций, которые помогают Вам с этим видом работы, в androidx.core.view
необходимо использовать Kotlin для этого.
тот, который лучше всего соответствует здесь, doOnLayout
:
Выполняет данное действие, когда это представление размечается. Если представление было размечено, и оно не запросило расположение, действие будет выполнено немедленно иначе, действие будет выполнено после того, как представление затем размечается.
действие будет только вызвано однажды на следующем расположении и затем удалено.
В Вашем примере:
bt.doOnLayout {
val ra = RotateAnimation(0,360,it.width / 2,it.height / 2)
... more code
}
Зависимость: androidx.core:core-ktx:1.0.0
Это происходит, потому что для представления нужно больше времени, которое будет расширено. Таким образом вместо того, чтобы звонить view.width
и view.height
на основном потоке, необходимо использовать view.post { ... }
, чтобы удостовериться, что Ваш view
был уже расширен. В Kotlin:
view.post{width}
view.post{height}
В Java можно также назвать getWidth()
и getHeight()
методы в Runnable
и передать Runnable
[1 110] метод.
view.post(new Runnable() {
@Override
public void run() {
view.getWidth();
view.getHeight();
}
});