Auf bestimmten Punkten ein ImageView anzeigen

  • Antworten:12
L K
  • Forum-Beiträge: 8

30.01.2014, 14:21:18 via Website

Hallo,
ich schreibe zur Zeit eine App, in welcher auf einem ImageView auf bestimmten Punkten (diese sollen immer auf der gleichen Stelle sein - egal welches Display) kleinere ImageViews angezeigt werden sollen, je nach dem was der User angibt - quasi eine Makierung von Punkten auf einem Bild/ImageView.
Nun habe ich das Problem dass meine Punkte, welche ich zur Zeit prozentual zur Weite und Höhe des (Haupt)ImageViews setze, auf jedem Handy etwas abweichen teilweise auch mit sehr große Abweichungen.
Wie kann ich die Punkte immer gleich setzen?
Vielleicht kann mir ja jemand helfen!

Antworten
L K
  • Forum-Beiträge: 8

30.01.2014, 17:06:07 via Website

Erstmal danke für deine Antwort!
Soll ich denn wirklich alle also auch das ImageView auf dem markiert werden soll in ein einziges Framelayout setzen?
Und wie könnte ich die Margins über den Quellcode setzen?

Antworten
impjor
  • Forum-Beiträge: 1.793

30.01.2014, 21:56:46 via App

Musst du nicht, würde aber Sinn machen. Die margin-Werte entsprechem dem Abstand in Pixeln zum FrameLayout.
Margin-Werte setzt du über LayoutParams
1FrameLayout.LayoutParams p = (FrameLayout.LayoutParams) ImageView#getLayoutParams();
2p.leftMargin = ...
3ImageView#setLayoutParams(p);
LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
L K
  • Forum-Beiträge: 8

30.01.2014, 22:25:53 via Website

Ok also ich habe das mit dem FrameLayout und dem setzen der Margins probiert, trotzdem ist das Image bei verschiedenen Auflösungen an unterschiedlichen Punkten gesetzt..

Antworten
impjor
  • Forum-Beiträge: 1.793

31.01.2014, 16:04:59 via App

Sind sind auf allen Geräten gleich viele Pixel vom Rand entfernt. Nur sind halt auf manchen Geräten auf einem cm mehr Pixel als auf anderen.
Rechne einfach
p.leftMargin = alterWert * getResources().getDisplayMetrics().density;
Das ergibt dann auf allen Geräten den selben Abstand (in cm/inch)

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
L K
  • Forum-Beiträge: 8

31.01.2014, 16:36:57 via Website

Erstmal danke für deine Mühe!
Habe das wieder ausprobiert, habe jedoch immer noch unterschiedliche Abstände.
Habe ich vielleicht etwas falsch übernommen oder falsch verstanden?
1public void onCreate(Bundle savedInstanceState)
2 {
3 super.onCreate(savedInstanceState);
4 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
5 setContentView(R.layout.activity_main);
6 ImageView imageflag = (ImageView) findViewById(R.id.imageView2);
7 FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) imageflag.getLayoutParams();
8 params.leftMargin = (int) (100 * getResources().getDisplayMetrics().density);
9 params.topMargin = (int) (100 * getResources().getDisplayMetrics().density);
10 imageflag.setLayoutParams(params);
11 }

Antworten
L K
  • Forum-Beiträge: 8

31.01.2014, 18:53:58 via Website

Wenn ich das in die vorherige Version einbaue erhalte ich doch einen viel zu großen Wert?

1params.leftMargin = (int) getResources().getDisplayMetrics().xdpi * 20;
2 params.topMargin = (int) getResources().getDisplayMetrics().ydpi * 20;

Antworten
L K
  • Forum-Beiträge: 8

31.01.2014, 19:10:48 via Website

Ok, nun habe ich (logischerweise) kleinere Werte eingesetzt.
Ich erhalte auf verschiedenen Smartphones jedoch immer noch unterschiedlich gesetzte Punkte.

Antworten
L K
  • Forum-Beiträge: 8

31.01.2014, 19:32:08 via Website

Habe ich gemacht, bleibt jedoch bei der Verschiebung.

Antworten