0

3D アプリケーションの作成に関する Android のチュートリアルと例を確認してきました。私の目標は、コンテキスト メニューでタッチできるノードをオーバーレイしてズーム/パンできる 2D 画像を表示できるアプリを作成することです。

GLSurfaceView の実装から始めましたが、ピンチ ツー ズームとパン タッチ リスナーを実装するカスタム ImageView に切り替えました。画像の表示、パン、ズームに適しています。

画像上の特定の座標にノード (画像またはスプライト) を表示する方法を理解し、画像がパン/ズームされたときに、それに応じてノードを移動およびスケーリングする必要があります。

これは、プライマリ ImageView の上に別のビューとして実装する必要がありますか? ImageView を操作すると同時にノードを操作する必要があると思います。

私もAPI 10にこだわっています。どんなアイデアでも大歓迎です。ありがとうございました。

4

1 に答える 1

1

画像に合わせてノードの位置を操作する必要があると思います。

以下のコードを使用してImageView、レイアウト内の特定の位置にプログラムで追加できます(必要に応じてサイズを強制します)。

これは単なる例であり、固定のドローアブルを使用しています(メソッドにパラメーターとして渡すように変更する必要があります)。追加する代わりに、既存のビューを移動するように変更することもできます。

private ImageView addImageView(RelativeLayout mainLayout, int x, int y, int width, int height, OnClickListener onClickListener){
    ImageView imageView = new ImageView(this);
    imageView.setAdjustViewBounds(false);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.height = height;
    params.width = width;
    imageView.setLayoutParams(params);
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    imageView.setImageDrawable(getResources().getDrawable(R.drawable.marker_red));
    //imageView.setBackgroundColor(Color.BLUE);
    params.leftMargin = x - width/2;
    params.topMargin = y - height/2;
    imageView.setOnClickListener(onClickListener);
    mainLayout.addView(imageView);
    return imageView;
}

詳細が必要な場合はお知らせください。

-編集済み--

親レイアウト内で位置を取得するには、API11以降を使用getX()してgetY()いる場合に使用できます。

API <11を使用している場合は、次を使用して(画面内の)生の位置を取得できます。

private boolean inViewBounds(View view, int x, int y){
    view.getDrawingRect(outRect);
    view.getLocationOnScreen(location);
    outRect.offset(location[0], location[1]);
    return outRect.contains(x, y);
}

また、親レイアウトの生の座標を、親を基準にしたobation座標に差し引く必要があります。

それが役に立てば幸い。

よろしく。

于 2012-11-24T19:07:22.253 に答える