1. Wir haben diesmal 2 Gewinnspiele zeitgleich für euch - Gewinne einmal ein UMI Plus E - Beim 2ten könnt ihr ein Nomu S30 gewinnen!
  1. Peter123, 06.06.2012 #1
    Peter123

    Peter123 Threadstarter Android-Hilfe.de Mitglied

    Also ich habe folgendes Problem:

    Ich muss eine ImageView manuell auf dem Display platzieren können. Dies sollte möglichst in Echtzeit geschehen, da die Daten für die Positionsbestimmung von einem Sensor geliefert werden.

    Das ganze funktioniert auch wunderbare für eine Displaygröße. In meinem Fall 480x800 mit folgendem Code:

    Code:
    RelativeLayout.LayoutParams par = (RelativeLayout.LayoutParams)imageView.getLayoutParams();
    par.topMargin = 50; //Abstand von oben
    par.leftMargin = 20; //Abstand von links
    imageView.setLayoutParams(par);
    Nun gibt es bei Android aber verschiedene Auflösungen und hier liegt mein Problem. Natürlich liegt es dann nahe das Ganze per dP zu lösen, jedoch ist dies auch nicht ganz genau. Dafür habe ich folgende funktion gewählt:

    Code:
    public float dpToPx(float dp){
    	    Resources resources = getResources();
    	    DisplayMetrics metrics = resources.getDisplayMetrics();
    	    float px = dp * (metrics.density/160f);
    	    return px;
    	}
    Als einzigen Ausweg sehe ich nun nur noch, für jede gängige Displaygröße, eine Fallunterscheidung in der setLayoutParam-Funktion einzubauen.

    Oder gibt es da vielleicht einen einfacheren Weg?
     
  2. Astrachan, 06.06.2012 #2
    Astrachan

    Astrachan Neuer Benutzer

    Was hältst du davon:

    Teile Höhe und Breite des Bildschirms in 100% ein. Und sagen wir mal, du willst die Grafik bei 10% in x-Richtung und 30% in y-Richtung platzieren.

    Code:
    int screenHeight  = getResources().getDisplayMetrics().heightPixels;
    int screenWidth = getResources().getDisplayMetrics().widthPixels;
    
    float factorX = 100/screenWidth;
    float factorY = 100/screenHeight ;
    
    //Und dann in den Parametern
    par.topMargin = 10*factorY; //Abstand von oben
    par.leftMargin = 30*factorX; //Abstand von links
    
    Würde mir so aus dem Stehgreif einfallen
     

Diese Seite empfehlen