问题描述
我将矩阵用于 zoom
、rotate
和 scale
图像,这是我的 onTouch()
代码,如下所示:
public boolean onTouch(@NonNull View v,@NonNull MotionEvent event) {
ImageView view = (ImageView) v;
// make the image scalable as a matrix
float scale;
view.setScaleType(ImageView.ScaleType.MATRIX);
// Handle touch events here...
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: //first finger down only
matrix.set(view.getimageMatrix());
savedMatrix.set(matrix);
start.set(event.getX(),event.getY());
Log.d(TAG,"mode=DRAG");
mode = DRAG;
lastEvent = null;
break;
case MotionEvent.ACTION_UP: //first finger lifted
case MotionEvent.ACTION_POINTER_UP: //second finger lifted
mode = NONE;
lastEvent = null;
Log.d(TAG,"mode=NONE");
break;
case MotionEvent.ACTION_POINTER_DOWN: //second finger down
olddist = getSpacing(event); // calculates the distance between two points where user touched.
Log.d(TAG,"olddist=" + olddist);
// minimal distance between both the fingers
if (olddist > 10f) {
savedMatrix.set(matrix);
getMidPoint(mid,event); // sets the mid-point of the straight line between two points where user touched.
mode = ZOOM;
Log.d(TAG,"mode=ZOOM");
}
lastEvent = new float[4];
lastEvent[0] = event.getX(1);
lastEvent[1] = event.getX(0);
lastEvent[2] = event.getY(1);
lastEvent[3] = event.getY(0);
d = getRotation(event);
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) { //movement of first finger
matrix.set(savedMatrix);
if (view.getLeft() >= -392) {
matrix.postTranslate(event.getX() - start.x,event.getY() - start.y);
}
} else if (mode == ZOOM && event.getPointerCount() == 2) { //pinch zooming
float newdist = getSpacing(event);
matrix.set(savedMatrix);
Log.d(TAG,"newdist=" + newdist);
if (newdist > 10f) {
matrix.set(savedMatrix);
scale = newdist / olddist; //thinking I need to play around with this value to limit it**
matrix.postScale(scale,scale,mid.x,mid.y);
}
if (lastEvent != null) {
newRot = getRotation(event);
float r = newRot - d;
matrix.postRotate(r,view.getMeasuredWidth() / 2f,view.getMeasuredHeight() / 2f);
}
float rotation = getoriginalRotation();
if (rotation > -7 && rotation < 7) {
rotateImagetoZeroAngle();
}
}
break;
}
// Perform the transformation
view.setimageMatrix(matrix);
return true; // indicate event was handled
}
现在,当旋转在 0
之间时,我想将矩阵旋转粘贴到 -3 to 3
并且为此我添加了方法 getoriginalRotation()
来获取旋转并添加了另一种方法来设置旋转 {{ 1}} 如下所示:
rotateImagetoZeroAngle()
现在,我不知道是什么问题,但这不起作用。顺便说一下,当我将 private void rotateImagetoZeroAngle() {
Matrix curMatrix = mainImage.getimageMatrix();
float[] v = new float[9];
matrix.getValues(v);
curMatrix.setValues(v);
mainImage.setScaleType(ImageView.ScaleType.MATRIX);
curMatrix.setRotate(0);
mainImage.setimageMatrix(curMatrix);
}
更改为 scaleType
时它会起作用,但在 FIT_CENTER
度图像之间在给定区域和 -3 to 3
scaleType 中调整大小为 FIT,它将不起作用。
我需要一些帮助,任何帮助将不胜感激,先谢谢你!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)