2016-04-26 10 views
0

Ich gehe durch ein Problem in einer Anwendung hier meine zu diesem Thema verwandt. Sehen Sie, ob Sie mir helfen können:Drawable und Android-Bildschirm Pixeldichte für feste Bildgröße

In meinem Fall habe ich eine ImageView, die ein Lineal zeigt, und dann muss ich diese Regel in der realen Größe zeigen, wo es nicht wachsen oder verkleinern muss wie die Bildschirmgröße oder Dichte. Wenn ich mein Moto G3 als Basis benutze, funktioniert es perfekt, aber wenn andere Geräte getestet werden, verliert es die tatsächliche Größe eines Lineals, weil das Bild versucht, die Bildschirmgröße anzupassen.

Das Bild des Lineals ist in PNG und misst 3600px x 155px und hat bis zu 30cm gemessen, es ist innerhalb eines LinearLayout orizontal. In meinem sichtbaren Bereich der Moto G3 ist es in 10cm, ein größerer Bildschirm zum Beispiel sollte einen größeren Bereich des Lineals (11 bis 15cm zum Beispiel) zeigen, aber es zeigt nur 10cm im Sichtfeld des Bildschirms, das zeigend Es wächst und schrumpft als Anzeigeeinstellungen und Dichte des Geräts.

Bevor ich ein Bild von RAGUA für jede Ressource (xxhdpi, xhdpi, etc) hatte, entschied ich mich, es in den Assets-Ordner von Android zu migrieren, aber immer noch mit dem gleichen Problem.

Haben Sie ein Licht, wie Sie es beheben können?

folgt dem Code:

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
     <HorizontalScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
     <ImageView 
      android:id="@+id/rulerPolegada" 
      android:layout_width="1780dp" 
      android:layout_height="103dp" 
      android:layout_marginTop="-10dp" 
      android:layout_marginLeft="@dimen/left_ruler" 
      /> 
     </RelativeLayout> 
     </HorizontalScrollView> 
    </LinearLayout> 

Und wie gesagt, nachdem ich für Vermögenswerte, begann ich es in Java zu setzen:

rulerPolegada = (ImageView) view.findViewById(R.id.rulerPolegada); 
     rulerPolegada.setImageDrawable(Controller.getImageAssets(getActivity(), "ruler_polegada.png")); 

Antwort

1

Aufgrund von Understanding Density Independence In Android können Sie diese Werte wie folgt berechnen

this table

Hier ist, wie Sie für Ihr Gerät (Moto G3) berechnen kann

  1. 30cm = 11,811 in
  2. Moto G3 Rasterdichte Eimer ist xhdpi - 320dpi
  3. 320px ~ = 1 in
  4. 320px * 11.811in ~ = 3780px

Mit dieser Schritte Sie, wie groß Ihr im berechnen Alter sollte sein.

Statt nun von verschiedenen Herrschern Bilder für unterschiedliche Bildschirmdichten bieten, legen Sie Ihr qualitativ hochwertiges Bild in ziehbar-anydpi Ordnern, weil A drawable in res/drawable-anydpi/ also is valid for any screen density. However, in this case, the -anydpi variant trumps any density-specific variant. aufgrund '-nodpi, -anydpi, and WTF?' article from The CommonsBlog

Unfortunatelly, können Sie nicht verwendete berechnete Werte in Layout XML-Datei direkt - ImageView Größe muss dynamisch in Java-Code geändert werden.

Above Lösung sollten Sie anständige accurancy (es kann um 10% diffent werden), aber Sie können DensityMetrics mit Standardanzeige verwenden zusammen tatsächliche horizontale und vertikale Dichte zu erhalten, die Sie mehr Bildpixelgröße genau helfen berechnen .

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 

// these will return the actual dpi horizontally and vertically 
float xDpi = dm.xdpi; 
float yDpi = dm.ydpi; 

bearbeiten

Berechnung für 480dp:

  1. 30cm = 11,811 in
  2. Dichte Eimer xxhdpi - 480dp
  3. 480px ~ = 1in
  4. 480px * 11.811in ~ = 5669px
+0

Ok, siehe: Diesmal hat meine App die folgenden Daten, e es funktioniert gut in Moto G3, mit Dichte 320: Bild PNG: 3591px - 153px ImageView: layout_width: 1780dp; layout_höhe: 153dp; Was wäre die Berechnung für ein Gerät mit 480 dpi Dichte zum Beispiel? –

+0

@ PauloLinhares-Packapps Ich habe Berechnung für 480dp am Ende der Antwort hinzugefügt –

+0

Es tut mir leid, ich wollte 320 und andere als 480. Es war mir nicht klar, diese Parameter Berechnungen. –

0

Sie dieses guide in Multi-Screen für Lauf lesen sollten

+0

Nein Freund, ich muss ein Bild mit fester Größe, identisch mit der Objektgröße in der realen Welt, ein Lineal zum Beispiel. Es kann die Größe in verschiedenen Geräten nicht ändern. Das heißt, die Support-Android kann nicht wachsen oder schrumpfen je nach dem Bildschirm oder ihre Dichte. Verstanden ? –

0

Ich bin nicht sicher, ob Sie Ihre Antworten richtig erhalten, weil es scheint, dass vorherige Antworten nicht erfüllt wurden. Ich hatte einmal das gleiche Problem - ich brauche diese ImageView um die gleiche Größe auf einer Vielzahl von Geräten ohne Skalierung zu haben. Ich habe mein Problem gelöst, indem ich dp für und layout_height