私は描画アプリに取り組んでおり、ユーザーが画像をインポートしてさらに描画できるようにしています。描画領域よりも大きい画像は、最大画面幅または画面高さに合わせて縮小されます。
インポートされた画像は、次を使用して drawingView の中央に配置されます canvas.drawBitmap(bitmap, x_adjustment, y_adjustment, paintScreen);
このようにして、インポートされた画像の左、右、または上、下に空白スペースができます。調整は (0,0) からカウントされます
x_adjustment
とy_adjustment
コーディング:
onDraw
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawBitmap(bitmap, x_adjustment, y_adjustment, paintScreen);
for (Integer key : pathMap.keySet())
canvas.drawPath(pathMap.get(key), paintLine); // draw line
}
タッチ開始:
private void touchStarted(float x, float y, int lineID)
{
Path path; // used to store the path for the given touch id
Point point; // used to store the last point in path
path = new Path(); // create a new Path
pathMap.put(lineID, path); // add the Path to Map
point = new Point();
previousPointMap.put(lineID, point);
path.moveTo(x, y);
point.x = (int) x;
point.y = (int) y;
}
touchMoved:
// called when the user drags along the screen
private void touchMoved(MotionEvent event)
{
// for each of the pointers in the given MotionEvent
for (int i = 0; i < event.getPointerCount(); i++)
{
// get the pointer ID and pointer index
int pointerID = event.getPointerId(i);
int pointerIndex = event.findPointerIndex(pointerID);
if (pathMap.containsKey(pointerID))
{
// get the new coordinates for the pointer
float newX = event.getX(pointerIndex);
float newY = event.getY(pointerIndex);
// get the Path and previous Point associated with this pointer
Path path = pathMap.get(pointerID);
Point point = previousPointMap.get(pointerID);
float deltaX = Math.abs(newX - point.x);
float deltaY = Math.abs(newY - point.y);
if (deltaX >= TOUCH_TOLERANCE || deltaY >= TOUCH_TOLERANCE)
{
path.quadTo(point.x, point.y, ((newX + point.x)/2),((newY + point.y)/2));
// store the new coordinates
point.x = (int) newX ;
point.y = (int) newY ;
}
}
}
}
タッチ終了:
private void touchEnded(int lineID)
{
Path path = pathMap.get(lineID);
bitmapCanvas.drawPath(path, paintLine);
path.reset();
}
質問:
インポートされた画像は中央に配置されますが (0,0) ではなく、描画されるすべての線に対して配置されるため、描画および画面タッチ時に適切に表示されている場合、ユーザーが指を離すと、つまりタッチが終了すると、確定した線x_adjustment と y_adjustment によってシフトされます。
たとえば、拡大縮小された画像の幅が画面の幅よりも小さい場合、左右に空白があり、線を引くと正しく表示されますが、指を離すと線が誤ってすぐに右に移動しx_adjustment
ます。
エラーを起こす調整が原因であることはわかっています。パスの座標をax、yシフトで保存することだと知っています。しかし、コードを変更する方法がわからず、パスに調整を加えようとしましたが、それでも失敗します。どなたか親切にガイドを教えていただけませんか? どうもありがとう!