【发布时间】:2014-05-12 17:10:43
【问题描述】:
我想在缩放的自定义图像视图中在 android 的画布上移动和缩放位图。 这适用于覆盖 onTouchEvent 的 getImageMatrix().invert(invertMatrix):
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!isStringEmpty(getTextForCanvas())) {
dumpEvent(event);
eventX = event.getX();
eventY = event.getY();
eventXY = new float[] {eventX, eventY};
getImageMatrix().invert(invertMatrix);
invertMatrix.mapPoints(eventXY);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(invertMatrix);
//start.set(event.getRawX(), event.getRawY());
start.set(eventX, eventY);
mode = Constants.DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(invertMatrix);
midPoint(mid, event);
mode = Constants.ZOOM;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = Constants.NONE;
break;
case MotionEvent.ACTION_MOVE:
if (mode == Constants.DRAG) {
invertMatrix.set(savedMatrix);
invertMatrix.postTranslate(event.getX() - start.x, event.getY() - start.y);
} else if (mode == Constants.ZOOM) {
float newDist = spacing(event);
if (newDist > 10f) {
invertMatrix.set(savedMatrix);
scale = newDist / oldDist;
invertMatrix.postScale(scale, scale, mid.x, mid.y);
}
}
break;
}
}
setImageMatrix(invertMatrix);
return true;
}
onDraw 方法:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(mImageBitmap, 0, 0, mImagePaint);
canvas.drawBitmap(canvasBitmap, invertMatrix, null);
}
但是最后一个 invertMatrix 丢失了数据,所以至少位图是在开始时绘制的(Android 4.4)或者消失了(Android 4.2)。 这里是 invertMatrix 的日志:
I/System.out﹕ Matrix{[1.0, 0.0, 421.0][0.0, 1.0, 650.47687][0.0, 0.0, 1.0]}
I/System.out﹕ Matrix{[1.0, 0.0, 421.0][0.0, 1.0, 652.96216][0.0, 0.0, 1.0]}
I/System.out﹕ Matrix{[1.0, 0.0, 421.0][0.0, 1.0, 654.5][0.0, 0.0, 1.0]}
I/System.out﹕ Matrix{[1.0, 0.0, 421.0][0.0, 1.0, 656.0872][0.0, 0.0, 1.0]}
I/System.out﹕ Matrix{[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}
谁能帮助我?也许我必须存储矩阵以防失效?怎么样?
更新:登录 Android 4.2:(矩阵坐标反转):
I/System.out﹕ Matrix{[1.0, -0.0, 101.778534][-0.0, 1.0, 225.0][0.0, 0.0, 1.0]}
I/System.out﹕ Matrix{[1.0, 0.0, -101.778534][0.0, 1.0, -225.0][0.0, 0.0, 1.0]}
【问题讨论】:
-
你想实现什么?
-
你可能会在这里看到我的答案stackoverflow.com/questions/21633545/…
-
感谢您的回答。我不想实现任何想法。我只想保留矩阵。正如您在日志中看到的,逆矩阵最后丢失了它的数据。同时我不知道为什么。也许这个问题类似于stackoverflow.com/questions/20431374/…,但我的应用程序在 4.2 和 4.4 上都无法运行。
-
如果您想移动/缩放/旋转位图,请在此处查看我的答案:stackoverflow.com/questions/21633545/…
-
用矩阵移动/缩放/旋转位图不是问题。问题是矩阵最后会丢失数据。
标签: android matrix bitmap imageview move