Intereting Posts
Gradle Console отсутствует в Intellij Idea АБР не отвечает. Вы можете подождать больше или уничтожить процесс «adb.exe» вручную и нажать «Перезагрузить», Как скрыть страницу ошибки WebView. Является ли это возможным? SwipeRefreshLayout от поддержки21 до старого стиля Отсутствующие кнопки в AlertDialog | Android 7.0 (Nexus 5x) Отображение сообщения строки состояния из BroadcastReceiver Android-приложение не запускается в более низкой версии, чем targetSDKVersion Диалог ввода текста Как ограничить плагин переключением задней / задней камеры в android / cordova Много GC при прокрутке ListView (с шаблоном держателя) Как удалить папку, когда пользователь выбирает удаление моего приложения в android АББ + Samsung Galaxy Каков самый простой и надежный способ получить текущее местоположение пользователя на Android? BitmapFactory.decodeStream возвращает значение null при настройке параметров Создание таблиц в базе данных sqlite на android

Как получить одинаковые координаты для изображения для всех разрешений в android?

Я застрял в получении x & y координат изображения для всех разрешений.

  1. 320, для устройств с конфигурацией экрана, таких как:
    • 240×320 ldpi (QVGA-телефон)
    • 320×480 mdpi (телефонная трубка)
    • 480×800 hdpi (телефон с высокой плотностью)
  2. 480, для экранов, таких как 480×800 mdpi (планшет / телефон).
  3. 600, для экранов, таких как 600×1024 mdpi (7-дюймовый планшет).
  4. 720, для экранов, таких как 720×1280 mdpi (10-дюймовый планшет).

Я создал изображение с оригинальным размером изображения, например, 1500 x 1119. Когда я коснулся изображения, я могу получить координаты, используя onTouch (). Моя проблема, если координаты меняются во всех устройствах. Я получаю разные значения x & y в разных обманах. Я не могу получить одинаковые значения x & y для всех разрешений. Как я могу это решить?

Solutions Collecting From Web of "Как получить одинаковые координаты для изображения для всех разрешений в android?"

Вот несколько более общее решение, чем требуется для вашего конкретного макета. Это предполагает, что вы знаете размеры исходного изображения и хотите знать координаты на нем, которые были задействованы, игнорируя размер и разрешение экрана. Хотя ваш макет задает ширину и высоту, которая соответствует исходному изображению, это будет обрабатывать макеты с шириной и высотой, заданными как wrap_content и match_parent , при условии, что вы используете один из типов шкалы, который соответствует всему изображению внутри границ обзора И сохраняет соотношение сторон (например, fitXY ).

Я не пробовал это внутри ScrollView как у вас есть, но в теории все должно быть хорошо.

 int sourceWidth = 1500; int sourceHeight = 1119; // Find view dimensions int width = view.getWidth(); int height = view.getHeight(); // Assuming image has been scaled to the smaller dimension to fit, calculate the scale float wScale = (float)width/(float)sourceWidth; float hScale = (float)height/(float)sourceHeight; float scale = Math.min(wScale, hScale); // Find the offset in the direction the image doesn't fill the screen // For ImageViews that wrap the content, both offsets will be 0 so this is redundant int offsetX = 0; int offsetY = 0; if (wScale <= hScale) { offsetY = (int)((height/2) - ((scale * sourceHeight)/2)); } else { offsetX = (int)((width/2) - ((scale * sourceWidth)/2)); } // Convert event coordinates to image coordinates int sourceX = (int)((event.getX() - offsetX) / scale); int sourceY = (int)((event.getY() - offsetY) / scale); 

Наконец я нашел ответ. Мне это понравилось.

Первоначально я создал свой макет, как это.

new_lay.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:orientation="vertical" > <ScrollView android:id="@+id/sv" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:orientation="vertical" > <HorizontalScrollView android:id="@+id/hv" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FFFFFF" > <FrameLayout android:id="@+id/ground_gry_fl1" android:layout_width="3193dp" android:layout_height="1815dp" android:background="#FFFFFF" > <FrameLayout android:id="@+id/zoom_lay1" android:layout_width="3193dp" android:layout_height="1815dp" android:background="@drawable/mall_map" > <ImageView android:id="@+id/marker_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" android:visibility="invisible" > </ImageView> </FrameLayout> </FrameLayout> </HorizontalScrollView> </ScrollView> 

NewClass .java

  public class NewClass extends Activity { ImageView mark; FrameLayout ground_gry_fl,zoom_lay; ScrollView sv; float val1 = 0.0f; float val2 = 0.0f; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.new_lay); sv=(ScrollView) findViewById(R.id.sv); mark = (ImageView) findViewById(R.id.marker_image); ground_gry_fl = (FrameLayout)findViewById(R.id.ground_gry_fl1); zoom_lay = (FrameLayout)findViewById(R.id.zoom_lay1); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels; int width = metrics.widthPixels; System.out.println("width"+width); System.out.println("height"+height); float densityDpi = metrics.density; System.out.println("densityDpi" + densityDpi); val1 = densityDpi * 1064; // here give random x value (co-ordinate) val2 = densityDpi * 1253; // here give random y value (co-ordinate) System.out.println("val1" + val1); System.out.println("val2" + val2); mark.setX(val1); mark.setY(val2); mark.setVisibility(View.VISIBLE); } } 

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

Установите плотность дисплея

  float density = getActivity().getResources().getDisplayMetrics().density; if (density == 4.0) { displayMetrixDensity = 640; } if (density == 3.0) { displayMetrixDensity = 480; } if (density == 2.0) { displayMetrixDensity = 320; } if (density == 1.5) { displayMetrixDensity = 160; } if (density == 1.0) { displayMetrixDensity = 160; }