Android: как разместить пользовательские элементы по кругу / цели

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

Любое предложение о том, как этого достичь? Может быть, есть библиотека, которую я могу использовать?

Круги по телефону Круги с пользовательскими объектами Выбранный элемент

Формальное решение

Создайте roundedshape.xml внутри roundedshape.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:innerRadiusRatio="4" android:shape="ring" android:thicknessRatio="5" android:useLevel="false"> <solid android:color="#af08d7" /> <size android:width="25dip" android:height="25dip"></size> </shape> </item> </layer-list> 

Добавить RelativeLayout с android:background="@drawable/roundedshape"

 <RelativeLayout android:layout_width="fill_parent" android:layout_height="300dp" android:padding="50dp" android:background="@drawable/roundedshape" android:id="@+id/myRelativeLayout" > </RelativeLayout> 

В своей Activity добавьте эти коды для динамического создания ImageButtons и добавления в Layout .

  RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.myRelativeLayout); for (int j = 0; j < 4; j++) { ImageButton myImageButton = new ImageButton(this); //generate ImageButton myImageButton.setId(j); //Set Id of button //Generate Random Number to place ImageButtons in random position int min = 40; int max = 60; Random r = new Random(); int randomNum = r.nextInt(max - min + 1) + min; myImageButton.setBackgroundResource(R.drawable.chatbox); //Set background of ImageButton RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100, 100); params.leftMargin = randomNum+j*randomNum; //Generate left margin dynamically params.topMargin = randomNum +j*randomNum; //Generate right margin dynamically relativeLayout.addView(myImageButton, params); //Add view myImageButton.setOnClickListener(getButtonAndDoAction(myImageButton)); //Add OnClickListener } 

Добавьте этот метод в действие, чтобы обработать событие щелчка ваших кнопок изображения.

 View.OnClickListener getButtonAndDoAction(final ImageButton button) { return new View.OnClickListener() { public void onClick(View v) { Toast.makeText(MainActivity.this, "button clicked" +button.getId(), Toast.LENGTH_SHORT).show(); } }; 

РЕЗУЛЬТАТ:

Введите описание изображения здесь

ПРИМЕЧАНИЕ. Я добавил комментарии, чтобы сделать коды максимально понятными

Вы можете нарисовать свое изображение как:

  1. Отдельные виды – как в предоставленном ответе, используя RelativeLayout
  2. Нарисовать на холсте
  3. Используйте opengl / существующие графические библиотеки.

Это зависит от ваших целей, может быть, вам нужен пользовательский макет, возможно, некоторые спрайты в вашей игре или, возможно, растровые изображения, чтобы сохранить их в файловой системе.

Intereting Posts
Android MediaPlayer отлично работает в приложении Custom Audio Streaming до Android 2.1, но не в более высоких версиях Android Studio. Портфолио и размеры файлов? Панель инструментов внутри CollapsingToolbarLayout, название панели инструментов не отображается Как показать карты в приложении Android, если сервисы Google Play не установлены на телефоне Поток RTSP URL с помощью VideoView в Android Как получить полученное растровое изображение изображения после того, как оно было изменено в изображение с помощью picasso Как запустить браузер для открытия локального файла Clear BitMap Cache – ионный ион Android – Layout дает дополнительные дополнения для кнопок; Давая мне лишние седые волосы GetHeight () vs getLayoutParams (). Height Переключение на определенный фрагмент дает странное java.lang.NullPointerException Как показать дату между разговором в recyclerview или в listview «Источник не найден», отладка приложений Android в Eclipse Ошибка анализа XML: несвязанный префикс для mapbox Отключить (затухать и исчезать) анимацию диалогового окна