画面の x 座標と y 座標を、画面上での描画に使用される座標に変えようとしています。
したがって、タッチリスナーによって起動される MotionEvent から画面の X 座標と Y 座標を取得します。
それらにキャンバスに描画するために使用されるマトリックスを掛けるのと同じくらい簡単だと思ったので、ビューの作成時にマトリックスインスタンスを作成しました
matrix = new Matrix();
がvoid onDraw(Canvas canvas)
呼び出されると、キャンバスのマトリックスをコンストラクターで作成したマトリックスに設定し、すべての変換をマトリックスに適用します
matrix.reset();
canvas.setMatrix(matrix);
canvas.translate(getWidth() / 2, getHeight() / 2);
canvas.scale(mScaleFactor, mScaleFactor);
canvas.translate(-getWidth() / 2, -getHeight() / 2);
canvas.translate(-x, -y);
ビューは本来のように見えますが、タッチリスナーでスクリーン座標を回転させて、与えられた値を使用してそのマトリックスの座標を表示しようとすると、mapPoints(float[] points)
正しくないため、onDraw で 0, 0 にクロスを描画します
canvas.drawLine(0f, -100f, 0f, 100f, viewportPaint);
canvas.drawLine(-100f, 0f, 100, 0f, viewportPaint);
スケーリング後に表示される場所をクリックすると、受け取った値は0、0に近くありません
float[] array = new float[]{e.getX(), e.getY()};
matrix.mapPoints(array);
Log.v(TAG, "points transformed are " + array[0] + ", " + array[1]);
明らかに 0, 0 マークをクリックしているこの写真を撮ったとき、次のログを受け取りました。
03-09 14:08:48.803: V/XXXX(22181): points transformed are 403.43967, 628.47
Ps。onDraw コード以外の場所でマトリックスに触れていません