Android アプリの canvas.getMatrix 値に奇妙な問題があります。私が持っているカスタムビュー(私のクラス、ImageViewを拡張)の場合、「真新しい」ビューでのgetMatrix()の結果は、2つのデバイス(および2つのOS)で異なります。私にとって意味をなさない方法でさまざまです(たとえば、次元に依存しません)。
- 私のビューは、両方のデバイス (Nexus7 と HTC Desire) で 96px にマップされる 64 dp に次ぐレイアウトの 2 番目です。
- Nexus では、初期の matrixFloats[Matrix.MTRANS_Y] 結果は 0 です (その後、スクロールとズームを開始すると、もちろん変化します)。
- HTC Desire (および Kindle Fire) では、開始値は 96 です。
Android のさまざまなバージョン間で Canvas Matrix の動作に違いはありますか?
アドバイスをありがとう - 誰かがその問題に精通していることを願っています.
PS。matrixFloats は、Matrix getValues(float[]) メソッドの結果である float[9] 配列です。
質問に答え、私の「汚い」解決策を共有します。
- これは、 onDraw() メソッドでキャンバスから取得した canvas.getMatrix() マトリックスです。
- これを回避するには (ImageView の画像のどの領域がタップされたかを理解するためにこのマトリックスが必要です)、マトリックスの初期状態に基づいて最初に設定したパラメーターを追加します。