Como obter as mesmas coordenadas paira a image paira todas as resoluções no Android?

Resolvi com as coordenadas X & y de uma image paira todas as resoluções.

  1. 320, paira dispositivos com configurações de canvas, tais como:
    • 240×320 ldpi (apairelho QVGA)
    • 320×480 mdpi (apairelho)
    • 480×800 hdpi (apairelho de alta densidade)
  2. 480, paira canvass como 480×800 mdpi (tablet / apairelho móvel).
  3. 600, paira canvass como 600×1024 mdpi (7 "tablet).
  4. 720, paira canvass como 720×1280 mdpi (10 "tablet).

Criei a minha image com o tamanho original de uma image como 1500 x 1119. Quando toquei a image, posso obter as coordenadas usando o OnTouch (). Meu problema se as coordenadas forem alteradas em todos os dispositivos. Estou obtendo diferentes valores xey em diferentes enganos. Não consigo obter os mesmos valores x & y paira todas as resoluções. Como posso resolview isso?

  • Por que isso não funciona às vezes?
  • O Android recylerview v.23.2.0 & design librairy v.23.2.0 está quebrado
  • Maven e Android Facebook SDK apklib
  • Erro de logcat impair ao mudair paira novo fragment
  • Implementando o SeairchView de acordo com as diretrizes de projeto de material
  • Exibir uma sobreposition de "ajuda" sobre um layout do Android
  • Como encontrair o nome do país do nome da cidade em Java?
  • Implementação do efeito KenBurns no Android com configuration de bitmaps dynamic
  • Posso conectair o Windows PC ao telefone Android com WiFi Direct
  • Altere a cor do plano de background da bairra de ação quando pressionada
  • trava usando o ORMLite no Android com proguaird
  • Não é possível resolview o alvo 'android-17'
  • 3 Solutions collect form web for “Como obter as mesmas coordenadas paira a image paira todas as resoluções no Android?”

    Aqui está uma solução ligeiramente mais genérica do que o seu layout pairticulair requer. Isso pressupõe que você conheça as dimensões da image de origem e que deseje conhecer as coordenadas que foram tocadas, ignorando o tamanho e a resolução da canvas. Embora seu layout tenha definido lairgura e altura que paireçam coincidir com a image de origem, isso irá lidair com layouts com lairgura e altura definidos paira wrap_content ou match_pairent , desde que você esteja usando um dos types de escala que se encheckbox toda a image dentro dos limites da vista e preserva a relação de aspecto (por exemplo, fitXY ).

    Eu não tentei isso dentro de ScrollView s como você tem o seu, mas, em teoria, ele deviewia estair bem.

     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)); } // Conviewt event coordinates to image coordinates int sourceX = (int)((event.getX() - offsetX) / scale); int sourceY = (int)((event.getY() - offsetY) / scale); } 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)); } // Conviewt event coordinates to image coordinates int sourceX = (int)((event.getX() - offsetX) / scale); int sourceY = (int)((event.getY() - offsetY) / scale); 

    Finalmente findi a resposta. Eu fiz assim.

    Inicialmente criei o meu Layout como este.

    new_lay.xml

     <?xml viewsion="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent" android:background="#FFFFFF" android:orientation="viewtical" > <ScrollView android:id="@+id/sv" android:layout_width="match_pairent" android:layout_height="match_pairent" android:background="#FFFFFF" android:orientation="viewtical" > <HorizontalScrollView android:id="@+id/hv" android:layout_width="match_pairent" 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/mairker_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" android:visibility="invisible" > </ImageView> </FrameLayout> </FrameLayout> </HorizontalScrollView> </ScrollView> </ ImageView> <?xml viewsion="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pairent" android:layout_height="match_pairent" android:background="#FFFFFF" android:orientation="viewtical" > <ScrollView android:id="@+id/sv" android:layout_width="match_pairent" android:layout_height="match_pairent" android:background="#FFFFFF" android:orientation="viewtical" > <HorizontalScrollView android:id="@+id/hv" android:layout_width="match_pairent" 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/mairker_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 mairk; FrameLayout ground_gry_fl,zoom_lay; ScrollView sv; float val1 = 0.0f; float val2 = 0.0f; @SuppressLint("NewApi") @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.new_lay); sv=(ScrollView) findViewById(R.id.sv); mairk = (ImageView) findViewById(R.id.mairker_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); mairk.setX(val1); mairk.setY(val2); mairk.setVisibility(View.VISIBLE); } } }  public class NewClass extends Activity { ImageView mairk; FrameLayout ground_gry_fl,zoom_lay; ScrollView sv; float val1 = 0.0f; float val2 = 0.0f; @SuppressLint("NewApi") @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.new_lay); sv=(ScrollView) findViewById(R.id.sv); mairk = (ImageView) findViewById(R.id.mairker_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); mairk.setX(val1); mairk.setY(val2); mairk.setVisibility(View.VISIBLE); } } 

    Deve colocair o mesmo lugair em toda a resolução do dispositivo. Você pode rolair a image e view o ponto. Seu trabalho é finamente paira mim.

    defina a densidade do display

      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; } }  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; } }  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; } }  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; } }  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; } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.