0

ldpiのテストアセットをxxxhdpiまで作成し、それぞれのドロウアブルフォルダに配置しました。画面の隅に物を描くと、位置が 0,0 or 0+canvas.getWidth()-bitmap.getWidth()キャンバスにアンドロイドを描画してdpiを設定する

などのように表示されたり、すべてのデバイス画面に正しく配置されているように見えます。

ビットマップを画面のどこにでも描画し、すべてのデバイスサイズで適切にスケール調整することができるようにしたいと考えていますが、それだけではわかりません。

2つのエミュレータで同じコードが実行されたスクリーンショットです。 enter image description here

描画コードは同じです。スケールを追加することで、ペイントにラインを適切に拡大させることができました。ビットマップも画面サイズに合わせて縮尺されますが、コードで50単位で描画する方法と、すべてのデバイスで50単位にする方法はありますか?

init関数

Paint p = new Paint(); 
p.setColor(Color.RED); 
p.setStyle(Paint.Style.FILL_AND_STROKE); 
float scale = context.getResources().getDisplayMetrics().density; 
p.setStrokeWidth(40*scale); 

Bitmap ball = BitmapFactory.decodeResource(context.getResources(), R.drawable.ball); 

次の2つの物事がうまく見ることができます上のスクリーンショットから機能

canvas.drawLine(0, 0, 400, 400, p); 
canvas.drawBitmap(ball, 50, 50, null); 
canvas.drawBitmap(ball2, 150, 150, null); 

をレンダリングします。ラインの長さは400pxです。今はそれがちょうど私が選んだ番号ですが、それはあまりにも小さい電話では遠すぎます。

また、1つのデバイスで本当にどのように離れているのか、文字通り2番目のデバイスでは互いの上に表示されています。

この問題を回避するにはどうすればよいですか?

答えて

0
  1. 画像がdrawableフォルダに適切に拡大縮小されていないようです。

    thisポストxxhdpi画像によればすなわち400x400pxxxhdpi)と100x100pxldpildpi画像よりも4倍大きくなければなりません。

  2. 行は(0,0)から(400,400)になります。 ldpiの画面は240x320pxなので、右下隅の座標は(240,320)となります。あなたが見るものは完全に正常です。

関連する問題