Я не могу заставить элементы правильно размещать свой макет в Android Studio. У меня есть ImageView с фоном png, содержащим номер 2. У меня есть два вида, каждый из которых содержит небольшой круг. Я хочу, чтобы круги всегда выровнялись на каждом конце второго. Я могу правильно их выровнять на одном устройстве, но выравнивание изменяется на другом устройстве. Возможно ли, чтобы они всегда правильно выравнивались на каждом устройстве?Форма позиции в точном месте на ImageView
Вот что я хочу, чтобы это выглядело как: http://i.stack.imgur.com/v7nsg.png
Вот мой код, чтобы вычислить одну из позиции точек:
circle2 = findViewById(R.id.circle2);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int heightPixels = metrics.heightPixels;
int widthPixels = metrics.widthPixels;
//dimensions of background image: 547x839
dot2H = (heightPixels/547) * 70;
dot2W = (widthPixels/829) * 70;
dot2Hposition = (heightPixels/829) * 500;
dot2Wposition = (widthPixels/547) * 300;
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) circle2.getLayoutParams();
params.height = dot2H;
params.width = dot2H;
params.leftMargin = dot2Wposition;
params.topMargin = dot2Hposition;
circle2.setLayoutParams(params);
Вот код макета:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:background="@drawable/bg"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="net.beauvine.animationtest.MainActivity"
tools:showIn="@layout/activity_main">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerInside"
android:src="@drawable/two"
android:id="@+id/imageView"
android:padding="10dp"
android:layout_alignParentEnd="false"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true" />
<RelativeLayout
android:id="@+id/dotLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:gravity="center"
>
<View android:layout_width="70dp"
android:layout_height="70dp"
android:id="@+id/circle2"
android:background="@drawable/circle"
android:clickable="true"
android:alpha=".8"
/>
<View android:layout_width="70dp"
android:layout_height="70dp"
android:id="@+id/circle"
android:background="@drawable/circle"
android:clickable="true"
android:alpha=".8"
/>
</RelativeLayout>
Я пробовал свое собственное предложение, и, похоже, я приближаюсь к своей цели. Тем не менее, одна вещь, о которой я не прояснил раньше, заключается в том, что точки - это кнопки, которые оживляют, когда вы касаетесь их. Как это включить? В вашем примере вы нарисовали круги на холсте. К сожалению, они не могут быть кнопками. –
Вам нужно создать конкретный объект, который будет рисовать сам и обрабатывать касание (например, «Просмотр»). Вы программируете что-то вроде игры? В этом случае вы можете попытаться использовать один из бесплатных игровых движков. Все они поддерживают пользовательский чертеж, анимацию объектов, необходимое взаимодействие и т. Д. – comrade
Спасибо за помощь! В итоге я сделал еще один пользовательский вид для каждой точки, и я превратил их в кнопки. Ваше решение определило меня на правильном пути. –