2011-12-29 27 views
0

異なる画面サイズと密度を持つ2つの異なるデバイスに画像があります。2つの異なるデバイス(同じ画面密度)で同じ画像に同じ円を描く

キャンバスを使用して、デバイスAのイメージに円を描き、デバイスBに中心座標を送信し、同じイメージが異なるサイズであっても同じ位置に円を描画します。

私は何のx座標送信する前に、デバイスA上で行うことは以下の通りです:

float density = getResources().getDisplayMetrics().density; 
int width = getWidth(); 
float inchesLength = width/density; 
float scaledXCenter = xCenter/inchesLength; 

私はy座標のために同じことを行います。デバイスBで

、私は同じパラメータを取得し、受信したinchesLenght座標掛け:

float density = getResources().getDisplayMetrics().density; 
int width = getWidth(); 
float inchesLength = width/density; 
float restoredXCenter = scaledXCenter * inchesLength; 

私はのAVDでこれをテストしています。 小さなデバイス(デバイスA)で、同じイメージが完全に表示されているが、より小さなスペースを占めていることがはっきり分かる場合でも、各AVDの画面密度は1です。

実際のデバイスで作業する場合、このアプローチは有効でしょうか?

もっと良い方法がありますか?

答えて

2

キャンバスの幅と高さを見つけ、幅と高さを分割して比率を見つけます。この比は、ここで、各値

で乗算されるべきサンプルコード

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.View; 

public class GameCanvas extends View { 
    private Paint paint = new Paint(); 
    private float canvasWidth; 
    private float canvasHeight; 
    private float ratio; 

    public GameCanvas(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    public void onDraw(Canvas canvas) { 
     canvasWidth = canvas.getWidth(); 
     canvasHeight = canvas.getHeight(); 
     ratio=canvasWidth/canvasHeight; 

     paint.setColor(Color.BLACK); 
     paint.setStrokeWidth(3); 
     //canvas.drawRect(30*ratio, 30*ratio, 100*ratio, 200*ratio, paint); 
     paint.setStrokeWidth(0); 
     paint.setColor(Color.CYAN); 
     canvas.drawRect(33*ratio, 60*ratio, 77*ratio, 77*ratio, paint); 
     paint.setColor(Color.YELLOW); 
     canvas.drawRect(33*ratio, 33*ratio, 77*ratio, 60*ratio, paint); 

    } 
} 
ある
関連する問題