本質的に、ピンチズームを可能にしながら、複数の ImageView (そのうちの 1 つは平面図、もう 1 つは四角形) を互いの上に重ねようとしています。私が目指している効果は、この投稿と非常によく似ています: http://stackoverflow.com/questions/10482229/draw-rectangle-over-imageview-for-highlight-that-can-be-zoom-in-out-アンドロイド?rq=1. ただし、(ユーザーが画面をタップしたときではなく) アプリケーションの起動時に四角形を表示し、時間の経過とともにその位置を更新する必要があります。
私の画像の 1 つは、間取り図の SVG ファイルです。AndroidSVG ライブラリ (https://code.google.com/p/androidsvg/) を使用して、SVGImageView として Android にレンダリングしています。私の現在の実装では、この SVG ファイルのピンチ ズームとパンが可能です (アプリケーションの起動時: http:/ /imgur.com/SceJuni、ピンチ ズーム後: http:/ /imgur.com/wL8anKd)。
(リンクにスペースがあり申し訳ありません。評判ポイントが 10 に達していないため、複数のリンクを投稿することはできません)
次に、この SVGImageView を四角形でオーバーレイして、このマップ上の場所を示す必要があります。SVGImageView がズームインおよびズームアウトするのに合わせて、この四角形をズームインおよびズームアウトします。このリンク (https://github.com/matabii/scale-imageview-android) から ScaleImageView クラスを使用することを検討しましたが、どのように進めればよいかわかりません。
リポジトリは次のとおりです: https://github.com/mthai95/SVGApp
そして、私がこれまでに持っているものは次のとおりです。
import android.app.Activity;
import android.graphics.*;
import android.os.Bundle;
import android.util.FloatMath;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.caverock.androidsvg.SVGImageView;
public void onCreate(Bundle savedInstanceBundle) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
SVGImageView svgImageView = new SVGImageView(this);
svgImageView.setImageAsset("w1a.svg");
svgImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
svgImageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
... pinch-zoom and pan ...
}
});
layout.addView(svgImageView,
new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
setContentView(layout);
}