やあ、
この素晴らしいライブラリに多大な労力を費やしていただき、ありがとうございます。 結果とAPIにはかなり満足していますが、ZoomImageView内にドローアブルのX座標とY座標を取得したいので、ZoomImageViewの上にいくつかの円を描画し、ドローアブルと一緒に移動させたいと思います。 (ズーム後も)。 マップ(ZoomImageView)があり、その上に、ユーザーがビューをズームイン/ズームアウトまたはパンするときに同じ相対位置を維持する必要があるいくつかのピンがあるので、問題について考えてください。 どんな助けでも大歓迎です。
ありがとうございました。
getPanX
とgetPanY
を使用して座標を取得できます。
getPanX
とgetPanY
を使用して座標を取得できます。
これは機能しますが、パンを取得する際にズーム倍率は考慮されません。 ズームインすると座標系が増幅されると思います。ズームと倍率に関して他に方法はありますか?
zoom
プロパティを掛けるだけでいいと思います。
zoom
プロパティを掛けるだけでいいと思います。
ズームを取得して乗算を実行すると、ズームの中心ピボット(ピンチが発生している場所)が考慮されないため、正確ではありません。これにより、ピボットのデフォルト位置に基づいてすべての座標が線形変換されます。 ピボットXとYをピンチ位置にリセットしようとしましたが、うまくいきませんでした。
ズームレイアウトの上部のビューがピンチに対して固定された位置にあるのに、ピンチのピボットポイントが重要なのはなぜですか? ズームレイアウトパンのようにビューを上に移動するだけで十分ではありませんが、逆に移動しますか? ズームレイアウトがズームインされると(つまり、ズーム> 1)、ズームレイアウトの座標が増幅されるため(頭のてっぺんから)、上部のビューの平行移動は元のピクセルサイズよりも小さくする必要があります。パンをズーム係数で割るだけでよいと思います)。
ズームレイアウトの上部のビューがピンチに対して固定された位置にあるのに、ピンチのピボットポイントが重要なのはなぜですか? ズームレイアウトパンのようにビューを上に移動するだけで十分ではありませんが、逆に移動しますか? ズームレイアウトがズームインされると(つまり、ズーム> 1)、ズームレイアウトの座標が増幅されるため(頭のてっぺんから)、上部のビューの平行移動は元のピクセルサイズよりも小さくする必要があります。パンをズーム係数で割るだけでよいと思います)。
パンとズームを使用すると、重ね合わせたレイアウトのピン(zoomLayoutの上)が線形転置として対角線上に転置されます。 ここで言いたいのは、ピンが配置されている位置をつまむことがあるため、後者はまったく転置するべきではありませんが、私の場合、それを乗算するか分割するかは対角線上を移動するだけです。 このライブラリには、「onZoomUpdate-> zoom:Float」や「onViewPanUpdate-> float [x、y]」など、いくつかのコールバックを追加する必要があると思います。
マルクスは正しいですが、代わりにzoom
あなたが使用する必要がありますrealZoom
安全であると。
したがって、 panX
またはpanX * realZoom
いずれかが必要です(または、計算に応じてこれを差し引いてください)。 それはあなたがこれらをどのように描いているかに依存します。
また、描画方法によっては、画面サイズやコンテナサイズなど、他のことも考慮する必要があります。 結局のところ、これは純粋に数学の問題です。 panX
とpanY
が何であるかを必ず理解してください。
engine.addListener()
を使用してコールバックを受信することもできます。
マルクスは正しいですが、代わりに
zoom
あなたが使用する必要がありますrealZoom
安全であると。したがって、
panX
またはpanX * realZoom
いずれかが必要です(または、計算に応じてこれを差し引いてください)。 それはあなたがこれらをどのように描いているかに依存します。また、描画方法によっては、画面サイズやコンテナサイズなど、他のことも考慮する必要があります。 結局のところ、これは純粋に数学の問題です。
panX
とpanY
が何であるかを必ず理解してください。
engine.addListener()
を使用してコールバックを受信することもできます。
いいですね、やってみます。 どうもありがとう
@andromedcodesは、ZoomImageView内で正しい描画可能な座標を取得できましたか?
これが私が試したことです:
ZoomImageView imgScreen;
Matrix m = new Matrix(imgScreen.getImageMatrix());
Drawable d = imgScreen.getDrawable();
RectF drawableRect = new RectF(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
RectF viewRect = new RectF(0, 0, imgScreen.getWidth(), imgScreen.getHeight());
m.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER);
m.invert(m);
// Convert the points inside the image
float[] points = new float[2];
points[0] = event.getX(); //holds x coordinate of drawable
points[1] = event.getY(); //holds y coordinate of drawable
m.mapPoints(points);
しかし、そこでパンとズームの値を調整する方法がわかりません。 どんな助けでもいただければ幸いです。 ありがとう
この問題は、過去20日間アクティビティがなかったため、自動的に古いものとしてマークされています。 今後7日以内にそれ以上の活動が発生しない場合は閉鎖されます。 貢献していただきありがとうございます。
最も参考になるコメント
マルクスは正しいですが、代わりに
zoom
あなたが使用する必要がありますrealZoom
安全であると。したがって、
panX
またはpanX * realZoom
いずれかが必要です(または、計算に応じてこれを差し引いてください)。 それはあなたがこれらをどのように描いているかに依存します。また、描画方法によっては、画面サイズやコンテナサイズなど、他のことも考慮する必要があります。 結局のところ、これは純粋に数学の問題です。
panX
とpanY
が何であるかを必ず理解してください。engine.addListener()
を使用してコールバックを受信することもできます。