首先,需要分辨手势的类型。

有两种类型的手势:
一是标准手势(Standard Gestures):
在Windows,android上,标准手势都是用一个手指。
在Mac OS X and iOS上,是两个手指。
手势完成后(用户拿起手指)后,OnGesture事件被触发(如果一个标准的手势进行识别)。

二是互动手势(interactive Gestures):。
多点触摸手势(igZoom,igRotate,等等),它们相当于Windows系统的手势,在Mac OS X,的iOS和Android上同样支持。
每一次移动手指在触摸表面上,一个OnGesture事件被触发。

四个标准手势向上,向下,向左和向右等同于交互式滑动手势。

第三, 建议编程只使用互动手势(interactive Gestures)就足够满足一般需要,并且尽量不要与标准手势混合使用。

放大:
var
LObj: IControl;
image: TImage;

begin

LObj := Self.ObjectAtPoint(ClientToScreen(EventInfo.Location));
if LObj is TImage then
begin
if not(TInteractiveGestureFlag.gfBegin in EventInfo.Flags) then
begin
image := TImage(LObj.GetObject);
image.Width := image.Width + (EventInfo.Distance - FLastDIstance)/2;
image.Height := image.Height + (EventInfo.Distance - FLastDIstance)/2;
image.Position.X := image.Position.X - (EventInfo.Distance - FLastDIstance)/2;
image.Position.Y := image.Position.Y - (EventInfo.Distance - FLastDIstance)/2;
end;
end;
FLastDIstance := EventInfo.Distance;

end;

平移:

begin
LObj := Self.ObjectAtPoint(ClientToScreen(EventInfo.Location));
if LObj is TImage then
begin
if not(TInteractiveGestureFlag.gfBegin in EventInfo.Flags) then
begin
image := TImage(LObj.GetObject);
//Set the X coordinate.
image.Position.X := image.Position.X + (EventInfo.Location.X - FLastPosition.X);
if image.Position.X < 0 then
image.Position.X := 0;
if image.Position.X > (Panel1.Width - image.Width) then
image.Position.X := Panel1.Width - image.Width;

//Set the Y coordinate.
image.Position.Y := image.Position.Y + (EventInfo.Location.Y - FLastPosition.Y);
if image.Position.Y < 0 then
image.Position.Y := 0;
if image.Position.Y > (Panel1.Height - image.Height) then
image.Position.Y := Panel1.Height - image.Height;
end;

FLastPosition := EventInfo.Location;
end;

Delphi XE5 for android 图片缩放和拖动处理的更多相关文章

  1. Delphi XE5 for Android (八)

    delphi xe5 编译的程序在启动时会有短暂的黑屏出现,这个现象产生是因为启动首个activity时会加载一些初始化数据,整个时间大约在2~3秒,如何处理? 网上有些资料,这里主要参考和整理了CS ...

  2. Delphi XE5开发Android程序使用自定义字体文件.

    万事大吉,只欠根据字体文件(.ttf文件)切换阅读字体,通常Android系统只带三种以下字体.一般用Java/Eclipse开发的话比较简单,typeface的createFromAsset,cre ...

  3. Delphi XE5的Android开发平台搭建[转]

    Delphi XE5支持Android ARM的开发,可以在Android虚拟机里运行,因此建议将XE5安装在64bit的Windows,内存可以大于3GB Delphi XE5安装光盘中包含了最基本 ...

  4. Delphi XE5 for Android (一)

    Delphi XE5 出来了,支持Android的开发,试用了一下,有几个问题: 1.只支持ARM7的设备,不支持Inter设备.手上刚好有一个华硕K004,很遗憾用不上,只能用手机试了. 2.要支持 ...

  5. Delphi XE5的Android开发平台搭建

    Delphi XE5支持Android ARM的开发,可以在Android虚拟机里运行,因此建议将XE5安装在64bit的Windows,内存可以大于3GB Delphi XE5安装光盘中包含了最基本 ...

  6. Android----基于多触控的图片缩放和拖动代码实现

    引自:http://www.codefans.net/articles/584.shtml 一个android中自定义的ImageView控制,可对图片进行多点触控缩放和拖动类,包括了对图片放大和图片 ...

  7. android图片缩放平移

    <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android=" ...

  8. Delphi XE5 for Android (七)

    Delphi XE5下,TMainMenu和TPopupMenu不可用,那么如何支持Android的菜单呢? 查看了一些资料,不得要领,只是摸索着先模拟一下吧. 首先在窗体上放置一个TPanel,在其 ...

  9. Android图片缩放方法

    安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...

随机推荐

  1. ListView之setEmptyView的问题

    使用listView或者gridView时,当列表为空时,有时需要显示一个特殊的empty view来提示用户,一般情况下,如果你是继承ListActivity,只要 <ListView and ...

  2. var obj = {};var obj2 = [];var obj3;

    <script> var obj = {}; console.log(obj); var obj2 = []; console.log(obj2); var obj3; console.l ...

  3. BeanDefinitionStoreException: Failed to read candidate component class: URL

    如题,遇到这种情况一般都是引用jar包版本不一致或者编译后的class除了问题 解决办法: a.如果是maven项目,把项目全部clean一下,重新mvn install b.如果不是maven项目, ...

  4. Oracle 11gR2 Database UNDO表空间使用率居高不下-转载

    客户的数据库是Oracle Database 11.2.0.3.0 for AIX 6.1 64bit的单机数据库.客户查询DBA_FREE_SPACE发现UNDO表空间的使用率高达98%以上.客户的 ...

  5. 记事本源代码 python3

    已实现基本功能,显示行号功能暂时实现不了(后面学会了再加,右下角可以实现定位光标所在行.列) 可能会有些bug 1 from tkinter import * from tkinter.message ...

  6. 03-position和anchorPoint

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  7. [转]MFC中UpdateData()函数的使用

    当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调用 UpdateData(FALSE):如果你希望知道用户在对话框中到底 ...

  8. 多线程——GCD

    一. GCD的基本概念 GCD:强大的中枢调度,纯C语言,提供了非常多强大的函数. 任务(block):执行什么操作. 队列(queue):用来存放任务. 同步函数dispatch_sync():不创 ...

  9. [AFUI]App Framework Quickstart

    ---------------------------------------------------------------------------------------------------- ...

  10. 【测试】使用hr用户下的employees和departments表写一条SQL语句,(MG连接)

    SQL> select * from employees d, departments t where d.department_id=t.department_id; rows selecte ...