日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 坐标绘图 缩放,在缩放/缩小或拖放到Android后获取画布坐标

發布時間:2025/3/15 Android 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 坐标绘图 缩放,在缩放/缩小或拖放到Android后获取画布坐标 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我正在開發一個應用程序,我在其中粘貼圖像,在畫布上繪制和繪畫.此應用程序還可以向上/向下縮放畫布或將其拖動到不同的位置.

我的問題是:在縮放或拖動畫布后,無法獲得正確的畫布坐標.畫布縮放或拖動后,我想繪制手指油漆,但無法檢索正確的地方,我已經感動了.. 🙁

我也是新的蜜蜂這是代碼.

@Override

public void onDraw(Canvas canvas) {

super.onDraw(canvas);

canvas.save();

//canvas.translate(mPosX, mPosY);

canvas.scale(mScaleFactor, mScaleFactor, super.getWidth() * 0.5f,

super.getHeight() * 0.5f);

mIcon.draw(canvas);

for (Path path : listPath) {

canvas.drawPath(path, paint);

}

canvas.restore();

}

public TouchExampleView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

@Override

public boolean onTouchEvent(MotionEvent ev) {

// Let the ScaleGestureDetector inspect all events.

mScaleDetector.onTouchEvent(ev);

final int action = ev.getAction();

switch (action & MotionEvent.ACTION_MASK) {

case MotionEvent.ACTION_DOWN: {

final float x = ev.getX();

final float y = ev.getY();

mLastTouchX = x;

mLastTouchY = y;

mActivePointerId = ev.getPointerId(0);

break;

}

case MotionEvent.ACTION_MOVE: {

final int pointerIndex = ev.findPointerIndex(mActivePointerId);

final float x = ev.getX(pointerIndex);

final float y = ev.getY(pointerIndex);

// Only move if the ScaleGestureDetector isn't processing a gesture.

if (!mScaleDetector.isInProgress()) {

final float dx = x - mLastTouchX;

final float dy = y - mLastTouchY;

mPosX += dx;

mPosY += dy;

invalidate();

}

mLastTouchX = x;

mLastTouchY = y;

break;

}

case MotionEvent.ACTION_UP: {

mActivePointerId = INVALID_POINTER_ID;

break;

}

case MotionEvent.ACTION_CANCEL: {

mActivePointerId = INVALID_POINTER_ID;

break;

}

case MotionEvent.ACTION_POINTER_UP: {

final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;

final int pointerId = ev.getPointerId(pointerIndex);

if (pointerId == mActivePointerId) {

// This was our active pointer going up. Choose a new

// active pointer and adjust accordingly.

final int newPointerIndex = pointerIndex == 0 ? 1 : 0;

mLastTouchX = ev.getX(newPointerIndex);

mLastTouchY = ev.getY(newPointerIndex);

mActivePointerId = ev.getPointerId(newPointerIndex);

}

break;

}

}

float objectNewX,objectNewY;

if (mScaleFactor >= 1) {

objectNewX = ev.getX() + (ev.getX() - super.getWidth() * 0.5f) * (mScaleFactor - 1);

objectNewY = ev.getY() + (ev.getY() - super.getHeight() * 0.5f) * (mScaleFactor - 1);

} else {

objectNewX = ev.getX() - (ev.getX() - super.getWidth() * 0.5f) * (1 - mScaleFactor);

objectNewY = ev.getY() - (ev.getY() - super.getHeight() * 0.5f) * (1 - mScaleFactor);

}

if (ev.getAction() == MotionEvent.ACTION_DOWN) {

path = new Path();

path.moveTo(objectNewX,objectNewY);

path.lineTo(objectNewX,objectNewY);

} else if (ev.getAction() == MotionEvent.ACTION_MOVE) {

path.lineTo(objectNewX,objectNewY);

listPath.add(path);

} else if (ev.getAction() == MotionEvent.ACTION_UP) {

path.lineTo(objectNewX,objectNewY);

listPath.add(path);

}

return true;

}

private class ScaleListener extends

ScaleGestureDetector.SimpleOnScaleGestureListener {

@Override

public boolean onScale(ScaleGestureDetector detector) {

mScaleFactor *= detector.getScaleFactor();

// Don't let the object get too small or too large.

mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));

invalidate();

return true;

}

}

總結

以上是生活随笔為你收集整理的android 坐标绘图 缩放,在缩放/缩小或拖放到Android后获取画布坐标的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。