Zoomlayout: ドローアブル座標を取得する

作成日 2019年02月15日  ·  10コメント  ·  ソース: natario1/ZoomLayout

やあ、

この素晴らしいライブラリに多大な労力を費やしていただき、ありがとうございます。 結果とAPIにはかなり満足していますが、ZoomImageView内にドローアブルのX座標とY座標を取得したいので、ZoomImageViewの上にいくつかの円を描画し、ドローアブルと一緒に移動させたいと思います。 (ズーム後も)。 マップ(ZoomImageView)があり、その上に、ユーザーがビューをズームイン/ズームアウトまたはパンするときに同じ相対位置を維持する必要があるいくつかのピンがあるので、問題について考えてください。 どんな助けでも大歓迎です。

ありがとうございました。

question stale

最も参考になるコメント

マルクスは正しいですが、代わりにzoomあなたが使用する必要がありますrealZoom安全であると。

したがって、 panXまたはpanX * realZoomいずれかが必要です(または、計算に応じてこれを差し引いてください)。 それはあなたがこれらをどのように描いているかに依存します。

また、描画方法によっては、画面サイズやコンテナサイズなど、他のことも考慮する必要があります。 結局のところ、これは純粋に数学の問題です。 panXpanYが何であるかを必ず理解してください。

engine.addListener()を使用してコールバックを受信することもできます。

全てのコメント10件

getPanXgetPanYを使用して座標を取得できます。

getPanXgetPanYを使用して座標を取得できます。

これは機能しますが、パンを取得する際にズーム倍率は考慮されません。 ズームインすると座標系が増幅されると思います。ズームと倍率に関して他に方法はありますか?

zoomプロパティを掛けるだけでいいと思います。

zoomプロパティを掛けるだけでいいと思います。

ズームを取得して乗算を実行すると、ズームの中心ピボット(ピンチが発生している場所)が考慮されないため、正確ではありません。これにより、ピボットのデフォルト位置に基づいてすべての座標が線形変換されます。 ピボットXとYをピンチ位置にリセットしようとしましたが、うまくいきませんでした。

ズームレイアウトの上部のビューがピンチに対して固定された位置にあるのに、ピンチのピボットポイントが重要なのはなぜですか? ズームレイアウトパンのようにビューを上に移動するだけで十分ではありませんが、逆に移動しますか? ズームレイアウトがズームインされると(つまり、ズーム> 1)、ズームレイアウトの座標が増幅されるため(頭のてっぺんから)、上部のビューの平行移動は元のピクセルサイズよりも小さくする必要があります。パンをズーム係数で割るだけでよいと思います)。

ズームレイアウトの上部のビューがピンチに対して固定された位置にあるのに、ピンチのピボットポイントが重要なのはなぜですか? ズームレイアウトパンのようにビューを上に移動するだけで十分ではありませんが、逆に移動しますか? ズームレイアウトがズームインされると(つまり、ズーム> 1)、ズームレイアウトの座標が増幅されるため(頭のてっぺんから)、上部のビューの平行移動は元のピクセルサイズよりも小さくする必要があります。パンをズーム係数で割るだけでよいと思います)。

パンとズームを使用すると、重ね合わせたレイアウトのピン(zoomLayoutの上)が線形転置として対角線上に転置されます。 ここで言いたいのは、ピンが配置されている位置をつまむことがあるため、後者はまったく転置するべきではありませんが、私の場合、それを乗算するか分割するかは対角線上を移動するだけです。 このライブラリには、「onZoomUpdate-> zoom:Float」や「onViewPanUpdate-> float [x、y]」など、いくつかのコールバックを追加する必要があると思います。

マルクスは正しいですが、代わりにzoomあなたが使用する必要がありますrealZoom安全であると。

したがって、 panXまたはpanX * realZoomいずれかが必要です(または、計算に応じてこれを差し引いてください)。 それはあなたがこれらをどのように描いているかに依存します。

また、描画方法によっては、画面サイズやコンテナサイズなど、他のことも考慮する必要があります。 結局のところ、これは純粋に数学の問題です。 panXpanYが何であるかを必ず理解してください。

engine.addListener()を使用してコールバックを受信することもできます。

マルクスは正しいですが、代わりにzoomあなたが使用する必要がありますrealZoom安全であると。

したがって、 panXまたはpanX * realZoomいずれかが必要です(または、計算に応じてこれを差し引いてください)。 それはあなたがこれらをどのように描いているかに依存します。

また、描画方法によっては、画面サイズやコンテナサイズなど、他のことも考慮する必要があります。 結局のところ、これは純粋に数学の問題です。 panXpanYが何であるかを必ず理解してください。

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日以内にそれ以上の活動が発生しない場合は閉鎖されます。 貢献していただきありがとうございます。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

Yahor10 picture Yahor10  ·  5コメント

kuoliangkwong picture kuoliangkwong  ·  4コメント

rupinderjeet picture rupinderjeet  ·  5コメント

wakaztahir picture wakaztahir  ·  5コメント

MohamedMedhat1998 picture MohamedMedhat1998  ·  6コメント