2

ImageView のソースとして事前スケーリングされたビットマップを設定しました。次に、 のマトリックスを読み取りImageView、ImageView のビットマップを を介してシフトしmatrix.postTranslate(shiftX, shiftY)ました。

ImageViewスケール前のビットマップの同じポイントの中心を維持しながら、ズームイン/ズームアウトして画像を作成したいと思います。

で画像を拡大しようとするとmatrix.postScale(zoom, zoom)、維持したいポイント(青い点)が別の場所(紫色の点)に移動します。

ビットマップを元に戻す方法をいくつか試しましたが、正しく動作しません。初期ビットマップ サイズ、ImageView サイズ、点線でマークされた距離を知っています。必要なシフトを計算して後で使用しようとしましmatrix.postTranslate(-zoomshiftX, -zoomshiftY)たが、正しくシフトしません。

基盤となるビットマップのピクセル数は、matrix.postScale() 関数の後で変更されず、matrix.postTranslate(-zoomshiftX/zoom, -zoomshiftY/zoom) を試しましたが、まだうまくいきません。

どうすればそのようなズームを実現できますか?

スケーリングの問題

4

2 に答える 2

1

ズーム可能な ViewGroup の作成に関するこちらの質問をご覧ください。最終的なソリューションのコード スニペットについて説明しましたが、その一部は役立つ場合があります。

RelativeLayout を拡張し、dispatchDraw() をオーバーライドしてズーム可能な ViewGroup を作成する

于 2011-07-08T12:02:30.400 に答える
0

多分これは役に立つかもしれません:

画面上に 2 本の指がある場合、2 本の指のイベントを取得して中間点を取得できます。

PointF mid;
MotionEvent event;
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
mid.set(x / 2, y / 2);

次に、画面の中央に中間点を持つスケーリングを設定できます。

matrix.postScale(scale, scale, mid.x, mid.y);
于 2014-04-18T20:23:29.240 に答える