2016-04-26 15 views
0

ここでは、この問題に関するアプリケーションの問題を解決します。固定サイズの画像の描画可能な画面サイズとAndroidの画面のピクセル密度

私の場合ImageViewにルーラーが表示されていて、このルールを画面サイズや密度として拡大または縮小する必要のないリアルサイズで表示する必要があります。私のMoto G3を基にして、完璧に動作しますが、他のデバイスをテストすると、イメージがスクリーンサイズに合っているため、実際のルーラのサイズが失われます。

ルーラーの画像はPNG形式で3600px x 155pxと測定され、30cmまで測定され、LinearLayoutまたはhorizo​​ntalの範囲内にあります。私のMoto G3の可視領域では、10cmのところにあります。たとえば、大きなスクリーン(例えば、11〜15cm)がルーラーのより広い領域を表示する必要がありますが、画面の視野には10cmしかありません。デバイスの表示設定と密度として拡大または縮小します。

リソース(xxhdpi、xhdpiなど)ごとにRAGUAの画像が表示される前に、Androidのassetsフォルダに移行することにしましたが、同じ問題が残っています。

あなたはそれを修正する方法について光を持っていますか?

コードに従います。

<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> 

そして私は資産のI映像の後、私はJavaでそれを設定するために始めた、と述べたとして:

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

答えて

1

Understanding Density Independence In Androidのため、これらの値は次のように計算できます

ここで

this table

  1. 30センチメートル= 11.811
  2. でモトG3画面密度のバケットがxhdpiであるあなたのデバイス(モトG3)のために計算できる方法です - 320dpi で
  3. 320PX〜= 1
  4. 320PX * 11.811in〜= 3780px

これは、あなたがどのように大きなあなたのIMを計算することができますステップに年齢はすべきである。

、代わりに別の画面密度に対して異なる定規の画像を提供する、原因'-nodpi, -anydpi, and WTF?' article from The CommonsBlog

から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.は生憎、あなたはレイアウトxmlファイルで計算値を使用することはできませんので、描画可能anydpiフォルダに、高品質な画像を配置ImageViewのサイズをJavaコードで動的に変更する必要があります。溶液上の

は、(それが10%diffentすることができます)あなたにまともな accurancyを与える必要がありますが、あなたは、実際の水平方向と垂直方向の密度を得るために、デフォルトの表示と一緒にDensityMetricsを使用することができ、あなたがより正確に画像のピクセルサイズを計算役立ちます。

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; 

編集

480dpのための計算:

  1. 30センチメートル= 11.811
  2. の濃度バケツxxhdpi - 480dp
  3. 480PX〜=
  4. 480PX 1インチ* 11.811in 〜= 5669px
+0

[OK]を参照してください:この時間私のアプリには、以下のデータがあります:密度が320の、Moto G3でうまくいきます。 イメージPNG:3591px - 153px ImageView:layout_width:1780dp; layout_height:153dp; たとえば、480 dpiの密度を持つデバイスの計算はどのようになりますか? –

+0

@ PauloLinhares-Packapps答えの最後に480dpの計算を追加しました –

+0

私は申し訳ありませんが、私は320と480以外を意味しました。これらのパラメータの計算は私には明らかではありませんでした。 –

0

あなたはマルチスクリーンでの実行のために、このguideをお読みください

+0

ない友人のためdpに提供する定義された値によって、私の問題を解決しました。さまざまなデバイスでサイズを変更することはできません。つまり、サポートアンドロイドは、画面または彼女の密度に応じて、これを拡大または縮小することはできません。理解していますか? –

0

前回の回答が満たされていないように見えるので、あなたの答えが正しいかどうかわかりません。私は同じ問題を一度持っていました - スケールアップせずに多数のデバイスに同じサイズを持たせるためにはImageViewが必要です。私は、現実世界でのオブジェクトのサイズ、例えば定規と同一の固定サイズ、との絵を作る必要があり、layout_widthlayout_height

関連する問題