Есть ли хороший способ заставить кнопку в Android делать разные вещи в зависимости от того, нажимаете ли вы на левую или правую половину кнопки? - PullRequest
0 голосов
/ 20 января 2019

В приложении для Android, которое я делаю, я хотел бы создать кнопку, которая будет выполнять разные действия, в зависимости от того, нажимает ли пользователь на левую половину кнопки или правую половину кнопки.Прямо сейчас я пытаюсь выяснить, как лучше всего это сделать.

Некоторые другие конкретные требования:
1. Я планирую использовать кнопку от 1 до 4 раз для каждого занятия.
2. Было бы очень полезно, если бы я мог поворачивать кнопку (например, на 90 градусов, на 180 градусов, чтобы она была вверх ногами)и помещаем текстовое представление сверху, чтобы оно выглядело как одна кнопка.Я обнаружил, что это не очень хорошо работает.Требуется много усилий, чтобы заставить его правильно отображаться и портится, когда вносятся даже небольшие изменения.

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

Каков лучший способ создать что-то подобное ??

Редактировать: когда я говорю «повернуть кнопку», я не имею в виду, что кнопка должна поворачиваться при нажатии или при выполнении какого-либо другого действия.Только то, что он смотрит в нужном мне направлении, когда приложение загружается.Кроме того, он должен быть повернут только в стандартных 4 направлениях (то есть вниз, вверх, влево, вправо).Извините, я не был более ясен в этом.

1 Ответ

0 голосов
/ 20 января 2019

Я создал первый подход с использованием framelayout, как показано ниже:

  <FrameLayout
    android:id="@+id/frame"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:onClick="rotate">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        app:layout_constraintBottom_toTopOf="@+id/view"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView2">

        <Button
            android:id="@+id/button"
            style="@style/Widget.AppCompat.Button.Borderless"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@color/colorPrimary" />

        <Button
            android:id="@+id/button2"
            style="@style/Widget.AppCompat.Button.Borderless"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@color/colorAccent" />
    </LinearLayout>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="Button text"
        android:textAppearance="@style/TextAppearance.AppCompat.Display1"
        android:textColor="@android:color/white" />
</FrameLayout>

для поворота любого представления создайте файл anim.xml в папке anim в res right click on res -> new android res dir -> выберите anim, затем создайте анимированный файл, щелкните правой кнопкой мыши на папке anim, которую вы только что создали, и new anim res file и вставьте код в боковую часть, это повернет ваш кадр. в этом определенном коде на 180 градусов

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:fillAfter="true">

<rotate
    android:duration="500"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="180" />
</set>

используйте его как следует на kotlin

 fun rotate(view: View) {

    val rotate = AnimationUtils.loadAnimation(
            applicationContext,
            R.anim.rotate
    )

    frame.startAnimation(rotate)

}
...