1

現在、私は屋内測位に関与するプロジェクトを行っています。私が担当するモジュールの 1 つは、マップをインポートし、座標でマップして最短距離を見つけることです。画像には画面解像度を超える画像が含まれていることが予想されるため、スクロール可能にしてから、ルート/座標でオーバーレイする予定です。しかし、canvas.drawline() を使用すると、座標が画面の解像度に制限されていることがわかりました。例: 画像の解像度は 1024 * 768 で、電話の解像度は 480*800 です。(0,0) から (600,400) までの線を描画してテストし、実行して画像をスクロールすると、線はそこにとどまり、移動しません。

コードの例

public class DrawView extends View {
    Paint paint = new Paint();
    private Bitmap bmp;
    private Rect d_rect=null;
    private Rect s_rect=null; 
    private float starting_x=0;
    private float starting_y=0;
    private float scroll_x=0;
    private float scroll_y=0;
    private int scrollRect_x;
    private int scrollRect_y;

    public DrawView(Context context) {
        super(context);
        paint.setColor(Color.RED);
        d_rect=new Rect(0,0,d_width,d_height);
        s_rect=new Rect(0,0,d_width,d_height);
        bmp=BitmapFactory.decodeResource(getResources(), R.drawable.hd);
        bmp.isMutable();
    }

    @Override
    public boolean onTouchEvent(MotionEvent me)
    {
        switch(me.getAction())
        {
        case MotionEvent.ACTION_DOWN:
            starting_x=me.getRawX();
            starting_y=me.getRawY();
        case MotionEvent.ACTION_MOVE:
            float x=me.getRawX();
            float y=me.getRawY();
            scroll_x=x-starting_x;
            scroll_y=y-starting_y;
            starting_x=x;
            starting_y=y;
            invalidate();
            break;              
        }
        return true;
    }

    @Override
    public void onDraw(Canvas canvas) {
        int cur_scrollRectx=scrollRect_x-(int)scroll_x;
        int cur_scrollRecty=scrollRect_y-(int)scroll_y;

        if(cur_scrollRectx<0)cur_scrollRectx=0;
        else if(cur_scrollRectx>(bmp.getWidth()-d_width))cur_scrollRectx=(bmp.getWidth()-d_width);
        if(cur_scrollRecty<0)cur_scrollRecty=0;
        else if(cur_scrollRecty>(bmp.getWidth()-d_width))cur_scrollRecty=(bmp.getWidth()-d_width);
        s_rect.set(cur_scrollRectx,cur_scrollRecty,cur_scrollRectx+d_width,cur_scrollRecty+d_height);

        canvas.drawColor(Color.RED);
        canvas.drawBitmap(bmp, s_rect,d_rect,paint);
        canvas.drawLine(0, 0, 900, 500, paint);

        scrollRect_x=cur_scrollRectx;
        scrollRect_y=cur_scrollRecty;
    }

}

画像上の実際の座標を取得する方法について何か考えはありますか? 私はまだAndroidアプリの開発に慣れていません。前もって感謝します !p/s: コードが乱雑で申し訳ありません >.<

4

1 に答える 1

1

s_rect はキャンバスのオフセットをビットマップ (?) に格納するため、必要な情報は s_rect に格納されると思います。

int bmp_x_origin = 0 - s_rect.left;
int bmp_y_origin = 0 - s_rect.top;

次に、 x 、 y で描画します ( x と y はビットマップ座標です)

int draw_x = bmp_x_origin + x;

コードをテストしていませんが、正しい軌道に乗っていると思います。

于 2012-08-12T15:54:58.277 に答える