精华内容
下载资源
问答
  • AIR Android:放大与缩小手势
    2020-12-21 03:01:45

    放大与缩小手势(1)

    放大与缩小手势对应TransformGestureEvent. GESTURE_ZOOM事件类型,使用时要求两个手指触摸屏幕,同时向外或向内做放缩动作,如图3-2所示。

    图3-2 放缩手势

    放缩手势操作起来简单且直观,在触摸屏设备上的应用范围很广,比如浏览网页时控制页面上的字体大小,查看地图时控制地图的缩放级别等。

    下面的实例程序GestureZoom演示了如何使用ZOOM手势来控制图片的放缩。对loader对象添加手势监听器,事件响应函数根据手势动作,实现放大或缩小加载的图片。主程序Main.as的代码如下:

    package

    {

    import flash.display.Loader;

    import flash.display.Sprite;

    import flash.events.Event;

    import flash.events.TransformGestureEvent;

    import flash.geom.Point;

    import flash.net.URLRequest;

    public class Main extends AppBase

    {

    private var loader:Loader;

    override protected function init():void

    {

    //使用Loader对象加载图片

    loader=newLoader();

    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);

    addChild(loader);

    //加载目录下的图片

    loader.load( new URLRequest("dog.jpg") );

    }

    //处理加载事件

    private function onLoadComplete(e:Event):void

    {

    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadComplete);

    //判断设备是否支持手势事件

    if ( Multitouch.supportsGestureEvents )

    {

    //对loader对象添加手势事件监听器

    loader.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom);

    }

    }

    //响应放缩手势

    private function onZoom(e:TransformGestureEvent):void

    {

    //记录下手势作用点的位置,采用loader对象中的本地坐标

    varp:Point=newPoint( e.localX, e.localY );

    //将坐标转换为父级容器的本地坐标

    varparent_p:Point=this.globalToLocal(loader.localToGlobal(p));

    //对loader对象做放缩处理

    loader.scaleX *= e.scaleX;

    loader.scaleY *= e.scaleY;

    //loader对象缩放后,p点在loader对象中的坐标没有变,但在父级容器中的坐标已发生变化,因此要//重新计算

    varparent_p2:Point=this.globalToLocal(loader.localToGlobal(p));

    //移动loader,使得点p在父级容器的坐标保持不变

    loader.x += (parent_p.x - parent_p2.x);

    loader.y += (parent_p.y - parent_p2.y);

    }

    }

    在本例中,使用Loader对象加载程序目录下的图片。加载完成后,对loader对象添加手势事件监听器,代码如下:

    if ( Multitouch.supportsGestureEvents )

    {

    loader.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom);

    }

    3.3.1 放大与缩小手势(2)

    由于Multitouch类的inputMode属性默认为处理手势事件,因此无需更改交互模式即可处理手势事件。使用手势事件之前,对Multitouch类的supportsGestureEvents属性做判断是一个好习惯。事实上,仅仅做这一个判断并不能确保设备就一定会支持所有的手势。要做到万无一失,还需要检查Multitouch的supportedGestures属性,检查的过程如下:

    varindex:int= -1;

    if ( Multitouch.supportedGestures != null )

    {

    index=Multitouch.supportedGestures.indexOf(TransformGestureEvent.GESTURE_ZOOM);

    }

    if(Multitouch.supportsGestureEvents && index != -1 )

    {

    //添加其他代码

    }

    supportedGestures是一个Vector类型的数组,包含了设备支持的所有手势类型。每个元素代表一个事件类型,如果设备任何一个手势都不支持,supportedGestures的值为null。因此,要检测设备是否支持某个手势,可以使用Vector的indexOf方法进行查找,确保代码在设备上能够正确运行。

    处理GESTURE_ZOOM 事件时,使用TransformGestureEvent 对象的scaleX与scaleY,即可分别获取水平方向与垂直方向的缩放值。如果手指向外滑动,表示放大,对应的scaleX与scaleY值大于1,反之小于1。因此,用以下两行代码就可以实现放缩控制:

    loader.scaleX *= e.scaleX;

    loader.scaleY *= e.scaleY;

    如果只是简单地对loader对象做放缩处理,会带来一个问题,那就是每次都是以loader的原点为中心点进行缩放。而符合逻辑的做法,应该是以手势动作的作用点为中心进行缩放。也就是说,要将手势动作的作用点设置为loader对象的注册点。虽然ActionScript并没有提供修改可视元件注册点的功能,但可以模拟这个行为。整个过程并不难,关键在于坐标转换,步骤如下:

    步骤1 记录手势作用点在loader对象中的本地坐标,记为点p,它将是新的“注册点”。

    步骤2 以loader对象的父级容器为参照物,计算出点p在父级容器中的本地坐标,记为点parent_p。

    步骤3 对loader对象进行缩放。

    步骤4 计算缩放后点p在父级容器中的本地坐标,记为点parent_p2。

    步骤5 移动loader对象的坐标,让点p在父级容器中的坐标保持不变。

    第5步操作的原理是:点p是loader对象的本地坐标,因此对loader对象进行缩放并不影响点p的值,但点p相对父级容器而言位置发生了变化,所以,根据缩放前后点p在父级容器中的位移,更改loader对象的坐标,就能够让点p在父级容器的坐标保持不变,从而达到了更改loader对象注册点的目的。起决定性作用的两行代码如下:

    loader.x += (parent_p.x - parent_p2.x);

    loader.y += (parent_p.y - parent_p2.y);

    请注意,程序GestureZoom的屏幕朝向设置为横屏模式,在程序描述文件中对应的设置项如下:

    landscape

    到这里,一个简单的图片放大镜就完工了。

    注意 程序中使用的图片放在bin目录中,和其他文件一起被包含在APK文件中,与主SWF文件位于同一目录结构,因此使用相对路径就可以直接加载。

    【编辑推荐】

    【责任编辑:闫佳明 TEL:(010)68476606】

    点赞 0

    更多相关内容
  • 每天学一点2020.4.22(Android-1)Android手势放大缩小组件1. 在Activity中使用2. 在Fragment中使用 Android手势放大缩小组件 这次是我第一次分享每天所学到的东西。今天所要分享的是在Android中实现对组件进行缩放...
  • 对于图片拉伸是移动开发中很常见的需求,最近工作中就遇到了利用iOS实现对图片的放大和缩小效果,通过查找资料找到了两种解决方法,分别是用捏合手势和用scrollView的代理方法来实现,下面话不多说,来看看详细的...
  • Android实现图片手势缩放、移动、双击放大缩小。
  • 主要为大家详细介绍了hammer.js实现图片手势放大效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 网上文章虽多,但是这种效果少之又少,我真诚的献上以供大家参考 实现原理:自定义ImageView对此控件进行相应的layout(动态布局). 这里你要明白几个方法执行的流程: 首先ImageView是继承自View的子类. ...
  • Swift版图片预览,支持手势捏合放大,双击缩小放大,刚开始用Swift写代码,写的不好的地方请大家指正,O(∩_∩)O~~
  • 1、解决pdf.js 渲染pdf不清晰,增加手机端H5手势放大缩小,提供按页自动加载速度快; 2、vue示例展示axios调用接口展示pdf,跨域代理,相对路径等方法/base64字符码加载说明; 3、提供react、angular、jquery等原生...
  • 图片放大手势放大

    2012-10-18 17:26:02
    修改了之前的图片放大工具,增加了限制图片超出边界的问题
  • svg在移动端的应用-手势图片拖动,手势放大缩小,比较方便
  • 本功能主要包括:单击退出,双击放大,两手指同时触摸屏幕图片随两手指移动放大缩小(解决了图片放大后单击不能退出的情况)
  • 注意:本地绝对路径地址不能加载,跨域问题用代理或者服务端解决。 svg模式渲染存在缺陷,只能渲染普通pdf,带签名、印章的可能会渲染不全,报错,pdf.js官方目前没有给出解决方案 ...所以需要放大查看pdf
  • 此工程专门针对Android应用中实现手势控制图片缩放的完全攻略,更可多张图片分别切换详细查看,采用了Matrix矩阵的方法,实例讲解了包括触摸点设置与各种冲突的处理等方面,相当全面,需要的朋友可以参考下
  • 手势放大缩小

    2015-02-26 09:53:49
    手动缩小和放大,方便快捷的操作,进行选择怪的数据加载与放大
  • 支持手势放大以及手势旋转_Demo,对应的博文地址为:https://blog.csdn.net/qq_30273259/article/details/93845320
  • 图片缩放,根据手势可以放大缩小
  • 安卓手势放大缩小相机
  • Android应用源码之通过手势对图片进行任意放大绽放旋转技术实现完整源码下载
  • textview 手势放大拖动旋转
  • NULL 博文链接:https://iaiai.iteye.com/blog/1931412
  • 通过手势对图片进行任意放大绽放旋转.zip安卓程序源码资源下载通过手势对图片进行任意放大绽放旋转.zip安卓程序源码资源下载 1.适合学生做毕业设计用 2.适合程序员学习研究用 3.适合新手自学研究使用
  • 一屏显示横向三个图片,选中图片放大,中间图片伏在左右图片上方,图片放大缩小,拖动,多点触控等手势
  • 手势缩小放大图片

    2016-09-22 17:56:22
    观看大图时随手势缩小放大图片的完美实现
  • 通过手势对图片进行任意放大绽放旋转.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 手机js手势放大缩放图片插件

    热门讨论 2015-01-20 14:29:38
    移动web APP的手势放大缩放图片插件
  • 鼠标手势变成放大

    热门讨论 2012-08-31 09:06:39
    通过css替换鼠标形状,变成放大镜和缩小镜,适合图片操作的时候使用。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,620
精华内容 6,248
关键字:

下载放大手势