Анимация радиуса границы

Я пытаюсь реализовать одну из этих анимаций, в которой радиус границы кнопки должен меняться вовремя. Меня смущает концепция аниматора значений. Вот мой код.

файл shape.xml

<?xml version = "1.0" encoding = "utf-8"?>
    <shape xmlns:android = "http://schemas.android.com/apk/res/android">
        <solid android:color = "@color/colorPrimary"/>
        <corners android:radius = "5dp"/>
    </shape>

кнопка на мой взгляд

<Button
    android:id = "@+id/button"
    style = "@android:style/Widget.Material.Button"
    android:layout_width = "0dp"
    android:layout_height = "wrap_content"
    android:layout_margin = "12dp"
    android:background = "@drawable/shape"
    android:onClick = "onclick"
    android:text = "@string/click_me"
    app:layout_constraintBottom_toBottomOf = "parent"
    app:layout_constraintCircleRadius = "0dp"
    app:layout_constraintEnd_toEndOf = "parent"
    app:layout_constraintStart_toStartOf = "parent"
    app:layout_constraintTop_toTopOf = "parent"
    tools:targetApi = "lollipop" />

Итак, что именно вас смущает?

Anatolii 14.07.2018 12:15
1
1
2 836
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
public class ExampleActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_example);

        findViewById(R.id.button).setOnClickListener(listener);

    }

    private final View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final float fromRadius = getResources().getDimension(R.dimen.start_corner_radius);
            final float toRadius = v.getHeight() / 2;
            final GradientDrawable gd = (GradientDrawable) v.getBackground();
            final ValueAnimator animator = ValueAnimator.ofFloat(fromRadius, toRadius);
            animator.setDuration(2000)
                    .addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                        @Override
                        public void onAnimationUpdate(ValueAnimator animation) {
                            float value = (float) animation.getAnimatedValue();
                            gd.setCornerRadius(value);
                        }
                    });
            animator.start();
        }
    };
}

ValueAnimator - простой и легкий способ, имхо

user10053723 14.07.2018 14:09

Другие вопросы по теме

Похожие вопросы

Кнопка не перенаправляет на активность, а вместо этого вызывает сбой приложения
Не удается запустить другое действие после нажатия кнопки (android)
Невозможно преобразовать объект типа java.lang.String в тип
Android: Nougat отключает соединение для передачи данных при выключенном экране, что не позволяет фоновой службе отправлять обновление loaction на сервер
React Native Run Android
Как получить все данные ребенка в firebase и показать их в моем приложении для Android?
В обоих случаях либо приложение закрыто, либо на переднем плане нам нужно получить уведомление
Как повторить один и тот же запрос API несколько раз с разными параметрами и выполнить второй сетевой вызов для отправки этих данных обратно на сервер с помощью RxJava
Перезапуск службы после перезагрузки с помощью Broadcastreceiver не работает
Значок запуска приложений изменен на значок по умолчанию в Oreo