Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 缩放活动_Android_Android Activity_Zooming_Android View_Gestures - Fatal编程技术网

Android 缩放活动

Android 缩放活动,android,android-activity,zooming,android-view,gestures,Android,Android Activity,Zooming,Android View,Gestures,所以我花了几个小时在网上寻找帮助,但是所有的论坛和文档都没有正确地向我解释我应该怎么做 目前,我有一个具有XML相对布局的活动(背景设置为地图的图片),我想实现一个多手势缩放功能。经过大量阅读,我似乎应该使用ScrollGestureDetector,它必须在视图中实现 我想让它,以便用户可以使用一个2指针的手势在屏幕上的任何地方,它将放大。问题是我不知道如何实现这一点,也找不到资源来向我展示如何对活动执行这一点 有什么方法可以为我的亲戚应用ScrollGestureDetector吗?我是否应

所以我花了几个小时在网上寻找帮助,但是所有的论坛和文档都没有正确地向我解释我应该怎么做

目前,我有一个具有XML相对布局的活动(背景设置为地图的图片),我想实现一个多手势缩放功能。经过大量阅读,我似乎应该使用ScrollGestureDetector,它必须在视图中实现

我想让它,以便用户可以使用一个2指针的手势在屏幕上的任何地方,它将放大。问题是我不知道如何实现这一点,也找不到资源来向我展示如何对活动执行这一点


有什么方法可以为我的亲戚应用ScrollGestureDetector吗?我是否应该创建一个覆盖整个屏幕并显示图片的自定义视图,以便在类定义中实现ScrollGestureDetector?我应该怎么做呢?

如果图像在
图像视图中,使用收缩缩放缩放图像效果最好。
ImageView
可以任意缩放图像,而背景图像仅基于视图边界进行缩放

您只需对包含
ImageView
的布局的活动调用
setContentView()

要在代码中使用scalegestruedetector,必须执行以下操作

  • 在视图中声明一个scalegestruedetector

    private ScaleGestureDetector mScaleGestureDetector;
    
  • 使用缩放事件侦听器初始化它,最好在
    onCreate()中进行初始化:

  • 将ScaleGetureDetector添加到
    onTouchEvent()
    方法:

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    
        mScaleGestureDetector.onTouchEvent(event);
    
        // do other stuff
        return super.onTouchEvent(event);
    }
    

  • 奇怪的是,
    scalegestruedetector.onTouchEvent()
    总是返回true,但是您可以使用
    isInProgress()
    来判断缩放操作是否已开始。

    您可以使用本教程来实现它:问题是我已经为许多不同的触摸位置设置了Activity.setOnTouchListener()。如何将这两种解决方案结合起来?或者,我必须通过ScrollGestureDetector处理所有触摸?我是否无法在现有的Activity.setOnTouchListener(新视图.OnTouchListener(){@Override public boolean onTouch(视图v,MotionEvent事件){//do something return true}中实现ScaleGetDetector;非常感谢。我不知道2号和3号是在视图内部实现的,还是在活动内部实现的,这取决于具体情况。在您的问题中,您提到创建自定义视图,这是一个不错的选择。如果它是一个没有任何触摸行为的视图,那么您可以设置一个
    OnTouchListener
    ,它将具有
    onTouchEvent
    实现。换句话说,您的活动中有调用
    view.setOnTouchListener()
    的代码。该活动还可以侦听触摸事件,这是您设置的。如果您要缩放整个屏幕,这也是一个有效的策略。
    @Override
    public boolean onTouchEvent(MotionEvent event) {
    
        mScaleGestureDetector.onTouchEvent(event);
    
        // do other stuff
        return super.onTouchEvent(event);
    }