Кнопка 3 круг кнопки, которые могут вращаться - PullRequest
0 голосов
/ 11 апреля 2020

Я уже давно ищу проблему Android. Я не нашел ничего в inte rnet, чтобы продвинуть эту проблему ...

Я ищу сделать 3 кнопки в круге, которые были бы одна внутри другой (см. Изображение)

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

Но на данный момент я уже блокирую создание 3 кнопки. Я проверил это:

<shape
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:innerRadiusRatio="20"
 android:shape="ring"
 android:thicknessRatio="0"
 android:useLevel="false">
 <solid android:color="@android:color/holo_green_dark"/>
</shape>

Но: 1. Нажатие всегда на последнюю кнопку, которая имеет смысл ... 2. Я не знаю, как я могу добавить изображение здесь

Я также попытался нарисовать 3 круга в Paint, а затем использовать их в качестве фона кнопки с разной высотой. Это работает, но форма кнопки все еще является прямоугольником. Так что это не оптимизировано.

У кого-нибудь есть решение? Я знаю, что это возможно, потому что я видел это в разных приложениях. Я просто не знаю, как это понять ...

Заранее спасибо

РЕДАКТИРОВАТЬ: enter image description here Я хотел бы что-то подобное. X «независимых» колец, где я могу повернуть каждое из них по отдельности.

3 Button circles

РЕДАКТИРОВАТЬ 2: область щелчка enter image description here Кнопка отображаются в виде круга -> ОК

Но форма области щелчка по-прежнему является квадратной. В моем случае мне нужна точность, я не могу позволить себе применить слушателя кнопки 1, когда пользователь нажимает кнопку 2.

Не удивительно, если я понятен ... Скажите, если нет.

1 Ответ

1 голос
/ 11 апреля 2020

РЕДАКТИРОВАТЬ - Переработанный код для фигуры

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="100dp" />
    <stroke
        android:width="3dp"
        android:color="#808080" />
    <solid android:color="@color/colorPrimaryDark" />
</shape>

Установите это в качестве фона для вашей кнопки и добавьте Ручную высоту и ширину для кнопки. Ваша кнопка будет отображаться.

РЕДАКТИРОВАТЬ
Используйте Framelayout для наложения ваших кнопок друг на друга. Измените размеры кнопки в соответствии с вашими предпочтениями. Анимированные кнопки (вращение) при нажатии кнопки.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="24dp"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="24dp"
        android:layout_marginRight="24dp"
        android:layout_marginBottom="24dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">


        <Button
            android:id="@+id/button"
            android:layout_width="180dp"
            android:layout_height="180dp"
            android:layout_gravity="center"
            android:background="@drawable/oval_green"
            android:text="Button" />

        <Button
            android:id="@+id/button1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_gravity="center"
            android:background="@drawable/oval_blue"
            android:text="Button" />
    </FrameLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Кнопки находятся под FrameLayout. Теперь прикрепите к ним код и протестируйте. обе кнопки работают нормально. Я надеюсь, что это поставит вас на правильный путь.

РЕДАКТИРОВАТЬ - с ImageView Убедитесь, что изображения обрезаны в соответствующих частях. Circles
Ваш макет. xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="24dp"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="24dp"
        android:layout_marginRight="24dp"
        android:layout_marginBottom="24dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <ImageView
            android:id="@+id/ivLarge"
            android:layout_width="250dp"
            android:layout_height="250dp"
            android:focusableInTouchMode="false"
            android:scaleType="fitXY"
            app:srcCompat="@drawable/large" />

        <ImageView
            android:id="@+id/ivMedium"
            android:layout_width="180dp"
            android:layout_height="180dp"
            android:layout_gravity="center"
            android:focusableInTouchMode="false"
            android:scaleType="fitXY"
            app:srcCompat="@drawable/medium" />

        <ImageView
            android:id="@+id/ivSmall"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_gravity="center"
            android:focusableInTouchMode="false"
            android:scaleType="fitXY"
            app:srcCompat="@drawable/small" />
    </FrameLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Ваша основная деятельность. java

package com.auvitronics.testing;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity
{

    public static final String TAG = "TransparentButton";

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

        final ImageView ivLarge = findViewById(R.id.ivLarge);
        final ImageView ivMedium = findViewById(R.id.ivMedium);
        ImageView ivSmall = findViewById(R.id.ivSmall);

        ivLarge.setDrawingCacheEnabled(true);
        ivMedium.setDrawingCacheEnabled(true);
        ivSmall.setDrawingCacheEnabled(true);

        ivLarge.setOnTouchListener(new View.OnTouchListener()
        {

            @Override
            public boolean onTouch(View view, MotionEvent event)
            {

                Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
                int pixel = bitmap.getPixel((int) event.getX(),(int) event.getY());

                if (pixel == Color.TRANSPARENT)
                {
                    System.out.println("Large Transparent Color");
                    return false;
                }else {
                    view.setRotation(view.getRotation() + 90);
                    System.out.println("Large Colored Area");
                    return true;
                }
            }
        });

        ivMedium.setOnTouchListener(new View.OnTouchListener()
        {

            @Override
            public boolean onTouch(View view, MotionEvent event)
            {

                Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
                int pixel = bitmap.getPixel((int) event.getX(),(int) event.getY());

                if (pixel == Color.TRANSPARENT)
                {
                    System.out.println("Medium Transparent Color");
                    return false;
                }else {
                    view.setRotation(view.getRotation() - 90);
                    System.out.println("Medium Colored Area");
                    return true;
                }
            }
        });

        ivSmall.setOnTouchListener(new View.OnTouchListener()
        {
            @Override
            public boolean onTouch(View view, MotionEvent event)
            {
                Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
                int pixel = bitmap.getPixel((int) event.getX(),(int) event.getY());

                if (pixel == Color.TRANSPARENT)
                {
                    System.out.println("Small Transparent Color");
                    return false;
                }else {
                    view.setRotation(view.getRotation() + 45);
                    System.out.println("Small Colored Area");
                    return true;
                }
            }
        });

    }
}

И результат enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...