Java 在Android中使用MikeOrtiz TouchImageView无法有效执行ZoomIn和Zoomout?

Java 在Android中使用MikeOrtiz TouchImageView无法有效执行ZoomIn和Zoomout?,java,android,zooming,touchimageview,Java,Android,Zooming,Touchimageview,我是安卓系统的新手。这是SO中已经提出的问题 现在此问题已解决。这是文件的最新版本,但每次我都会收到此错误 02-03 21:21:08.030: E/AndroidRuntime(17110): java.lang.UnsupportedOperationException: Scale must be greater than minScale and less than maxScale 每当我尝试用手指触摸图像时,它会抛出一个异常,我的应用程序就会崩溃。尝试连续单击“缩放”和“缩放”

我是安卓系统的新手。这是SO中已经提出的问题 现在此问题已解决。这是文件的最新版本,但每次我都会收到此错误

 02-03 21:21:08.030: E/AndroidRuntime(17110): java.lang.UnsupportedOperationException: Scale must be greater than minScale and less than maxScale
每当我尝试用手指触摸图像时,它会抛出一个异常,我的应用程序就会崩溃。尝试连续单击“缩放”和“缩放”按钮时也是如此。我希望此图像的放大和缩小行为与webview一样。我不想对此功能设置任何限制。我如何解决此触摸和缩放错误iamgeScale设置。请帮助我

MainActivity.java:

 public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
                  setContentView(R.layout.newxml);
        ImageView zoonIn = (ImageView)findViewById(R.id.btn_zoomIn1);
        ImageView zoonOut = (ImageView)findViewById(R.id.btn_zoomout1);

        final TouchImageView1 touch = (TouchImageView1)findViewById(R.id.imagezoom);

        Bitmap bImage = BitmapFactory.decodeResource(this.getResources(), R.drawable.app_icon);

        touch.setImageBitmap(bImage);
        touch.setMinZoom(0.5f);
        touch.setMaxZoom(5f);

        zoonIn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                 float scale = touch.getCurrentZoom();
                 PointF centerPoint = touch.getCenterOfZoomedImage();
                Number zoomedValue =scale*1.25;
                        float value = zoomedValue.floatValue();
                touch.setZoom(value,centerPoint.x,centerPoint.y);
            }
        });


        zoonOut.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                 float scale = touch.getCurrentZoom();
                 PointF centerPoint = touch.getCenterOfZoomedImage();
                    Number zoomedValue =scale/1.25;
                       float value = zoomedValue.floatValue();
                    touch.setZoom(value,centerPoint.x,centerPoint.y);
                }

        });

    }
}
Logcat错误:

 public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
                  setContentView(R.layout.newxml);
        ImageView zoonIn = (ImageView)findViewById(R.id.btn_zoomIn1);
        ImageView zoonOut = (ImageView)findViewById(R.id.btn_zoomout1);

        final TouchImageView1 touch = (TouchImageView1)findViewById(R.id.imagezoom);

        Bitmap bImage = BitmapFactory.decodeResource(this.getResources(), R.drawable.app_icon);

        touch.setImageBitmap(bImage);
        touch.setMinZoom(0.5f);
        touch.setMaxZoom(5f);

        zoonIn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                 float scale = touch.getCurrentZoom();
                 PointF centerPoint = touch.getCenterOfZoomedImage();
                Number zoomedValue =scale*1.25;
                        float value = zoomedValue.floatValue();
                touch.setZoom(value,centerPoint.x,centerPoint.y);
            }
        });


        zoonOut.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                 float scale = touch.getCurrentZoom();
                 PointF centerPoint = touch.getCenterOfZoomedImage();
                    Number zoomedValue =scale/1.25;
                       float value = zoomedValue.floatValue();
                    touch.setZoom(value,centerPoint.x,centerPoint.y);
                }

        });

    }
}
02-03 21:21:08.030:E/AndroidRuntime(17110):致命异常:主 02-03 21:21:08.030:E/AndroidRuntime(17110):java.lang.UnsupportedOperationException:比例必须大于minScale且小于maxScale 02-03 21:21:08.030:E/AndroidRuntime(17110):在com.example.imagetouchview.TouchImageView1.setZoom(TouchImageView1.java:369) 02-03 21:21:08.030:E/AndroidRuntime(17110):位于com.example.imagetouchview.TouchImageView1.setZoom(TouchImageView1.java:354) 02-03 21:21:08.030:E/AndroidRuntime(17110):位于com.example.imagetouchview.MainActivity$2.onClick(MainActivity.java:71) 02-03 21:21:08.030:E/AndroidRuntime(17110):在android.view.view.performClick(view.java:4211)上 02-03 21:21:08.030:E/AndroidRuntime(17110):在android.view.view$PerformClick.run(view.java:17267) 02-03 21:21:08.030:E/AndroidRuntime(17110):在android.os.Handler.handleCallback(Handler.java:615)上 02-03 21:21:08.030:E/AndroidRuntime(17110):在android.os.Handler.dispatchMessage(Handler.java:92)上 02-03 21:21:08.030:E/AndroidRuntime(17110):在android.os.Looper.loop(Looper.java:137) 02-03 21:21:08.030:E/AndroidRuntime(17110):位于android.app.ActivityThread.main(ActivityThread.java:4898) 02-03 21:21:08.030:E/AndroidRuntime(17110):位于java.lang.reflect.Method.Invokenactive(本机方法) 02-03 21:21:08.030:E/AndroidRuntime(17110):位于java.lang.reflect.Method.invoke(Method.java:511) 02-03 21:21:08.030:E/AndroidRuntime(17110):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 02-03 21:21:08.030:E/AndroidRuntime(17110):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 02-03 21:21:08.030:E/AndroidRuntime(17110):在dalvik.system.NativeStart.main(本机方法) 02-03 21:21:19.400:I/进程(17110):发送信号。PID:17110信号:9


现在很明显:您的缩放值大于您设置的最大缩放值。
5.9604645.
尝试将maxZoom设置为6f。在设置最小/最大缩放值之前,您需要正确地考虑您的用法。 还需要考虑不同的行为及其对应的值:

浮动比例=touch.getCurrentZoom()
PointF centerPoint=touch.getCenterOfZoomedImage()

我建议您仔细检查哪些内容符合您的要求,并查看:

我已经使用了它,它的库类也非常简单和透明。

在您的活动中,第369行和第364行是什么,还可以调试和检查在onclick侦听器中获取的值,或者只发布值的日志。另外,如果符合您的要求,请尝试使用public void setZoom(float scale,float focusX,float focusY,ScaleType ScaleType){if(scalemaxScale){抛出新的不支持操作异常(“scale必须大于minScale,小于maxScale”);}if(focusX<0 | | focusX>1 | | focusY<0 | | focusY>1){抛出新的不支持操作异常(“focusX和focusY的值必须在0和1之间”)}设置缩放类型(scaleType);重置缩放();缩放图像(缩放,viewWidth/2,viewHeight/2,false);矩阵.getValues(m);m[matrix.MTRANS\u X]=-((focusX*getImageWidth())-(viewWidth*0.5f));m[Matrix.MTRANS_Y]=-((focusY*getImageHeight())-(viewHeight*0.5f));Matrix.setValues(m);setImageMatrix(Matrix);}这是第369行,我得到的异常与这里写的相同检查缩放值的值及其后面的浮动:zoomedValue=scale*1.25;float value=zoomedValue.floatValue();需要重新计算float scale=touch.getCurrentZoom()中的任意一个;PointF centerPoint=touch.getCenterOfZoomedImage();或最小/最大缩放值这是值,之后我的应用程序崩溃:02-03 22:23:16.980:I/Zoomedivalue(11244):5.9604644775390625 02-03 22:23:16.980:I/value(11244):5.9604645我可以在按钮上进行缩放和缩小吗单击使用mentioend库如果可以,请给我任何示例项目。我最好至少检查我提供的链接。是的,您可以实现缩放,并且看起来符合您的要求。需要深入研究,您也可以从该链接获得示例应用程序和更多信息。