如何使用Ubuntu手机中的手势来放大或缩小图片

对于一些应用来说,我们希望使用手势来做一些动作。比如利用手势来放大图片,或旋转图片。对于pdf阅读器来说也是一个好的方法来放大自己的字体。在这篇文章中,我们来介绍如何使用手势。

在QML中,有一个元素PinchArea。在这篇文章中也有一些介绍“Qt Quick 事件处理之捏拉缩放与旋转”。这里不再累述,我们直接贴上我们的例程:

import QtQuick 2.0
import Ubuntu.Components 1.1

/*!
    \brief MainView with a Label and Button elements.
*/

MainView {
    // objectName for functional testing purposes (autopilot-qt5)
    objectName: "mainView"

    // Note! applicationName needs to match the "name" field of the click manifest
    applicationName: "pinch.ubuntu"

    /*
     This property enables the application to change orientation
     when the device is rotated. The default is false.
    */
    //automaticOrientation: true

    // Removes the old toolbar and enables new features of the new header.
    useDeprecatedToolbar: false

    width: units.gu(50)
    height: units.gu(75)

    Page {
        id:main
        title: i18n.tr("Simple")

        Flickable {
            id: flick
            anchors.fill: parent
            contentWidth: 768
            contentHeight: 1024

            PinchArea {
                width: Math.max(flick.contentWidth, flick.width)
                height: Math.max(flick.contentHeight, flick.height)

                pinch.maximumScale: 20;
                pinch.minimumScale: 0.2;
                pinch.minimumRotation: 0;
                pinch.maximumRotation: 1;

                property real initialWidth
                property real initialHeight

                onPinchStarted: {
                    initialWidth = flick.contentWidth
                    initialHeight = flick.contentHeight
                }

                onPinchUpdated: {
                    // adjust content pos due to drag
                    flick.contentX += pinch.previousCenter.x - pinch.center.x
                    flick.contentY += pinch.previousCenter.y - pinch.center.y

                    console.log("rotation: " + pinch.rotation );
                    if ( pinch.rotation > 0 )
                        flick.rotation += 0.2;
                    else
                        flick.rotation -= 0.2;

                    // resize content
                    flick.resizeContent(initialWidth * pinch.scale, initialHeight * pinch.scale, pinch.center)
                }

                onPinchFinished: {
                    // Move its content within bounds.
                    flick.returnToBounds()
                }

                Rectangle {
                    width: flick.contentWidth
                    height: flick.contentHeight
                    color: "white"
                    Image {
                        id: image
                        anchors.fill: parent
                        source: "images/sky.jpg"
                        MouseArea {
                            anchors.fill: parent
                        }
                    }
                }
            }
        }
    }
}

运行我们的应用,可以看到如下的画面:

    

整个项目的源码在:git clone https://gitcafe.com/ubuntu/pinch.git

时间: 2024-11-02 14:54:11

如何使用Ubuntu手机中的手势来放大或缩小图片的相关文章

如何在Ubuntu手机中使用前置照相机

我们可以在Ubuntu QML的API文档中看到Camera的用法,但是里面没有写到任何的前置Camera的调用方法.对于一些应用来说,前置Camera的使用是重要的.我们必须使用Qt C++代码来实现这个功能.在这篇文章中,我们来介绍如何使用Ubuntu手机中的前置照相机. 1)创建一个最基本的QML应用         这样我们就生成了一个含有plugin的项目. 2)在项目中加入CameraSelector来选择照相机 为了能够调用Camera的一些API,我们在plugin中加入如下的C

怎么在Ubuntu手机中打开开发者模式

当我们刷最新的Ubuntu手机软件时,我们必须打开开发者模式.否则,当我们使用"adb"命令时,会出现如下的情况: 当手机和电脑连接后,不能查看到任何的device.当我们打开开发者模式后,我们可以看到如下的画面: 这里我们可以看到,我们通过"adb"命令可以看到连接到的device. 为了打开开发者模式,我们可以通过如下的步骤来操作: 1)打开"系统设置"应用 2) 选中"关于此手机" 3)点击"开发者模式&quo

如何在Ubuntu手机中使得一个应用是全屏的应用

我们知道很多的开发者想把自己的应用设置为全屏的应用,这样可以使得应用能更多地占用屏幕的有效面积以使得自己的应用更好看.在默认的SDK的样板中,在应用的最上面,有一个"title"的地方占用很多的空间.对于一些应用来说,在主界面中,这个可能并不有用,但是对于使用PageStack的应用来说,这个区域显示一个向左的箭头以返回上一个页面的. 最近我也有这样的问题,我既想使用PageStack给予我的方便,又想拥有全屏的功能.在这篇文章中,我们来介绍如何做到全屏的应用.另外我们值得指出的是:我

如果在Ubuntu手机中判断键盘是否已经开启

在一些应用中我们需要判断键盘是否已经出现.如果出现的话,我们有时不希望有键盘.我们也可以通过软件的方法让键盘消失.在这篇文章中,我们来介绍如何来实现这个. import QtQuick 2.0 import Ubuntu.Components 1.1 /*! \brief MainView with a Label and Button elements. */ MainView { // objectName for functional testing purposes (autopilot

如何在Ubuntu手机中监测网络的连接信息

我们知道对于很多的网路应用来说,网路的连接信息对于我们来说非常重要.我们有必要对网路的连接信息进行监测.一旦网路连接断开,我们需要提醒用户或做一些处理.在Ubuntu平台上,我们可以使用connectivity库来查看. 我们可以利用SDK的模版来创建一个最简单的QML应用.因为我们要使用connectivity,所以我们必须加入"connectivity"的security policy. 在我们的开发者网站上虽然也有NetworkStatus的介绍,但是可能并不是很全,我们可以使用

怎样在Ubuntu手机平台中开发Cordova HTML5应用

我们知道Cordova HTML5应用具有夸平台的特性,同一时候也具有訪问本地一些资源的能力.在今天的这篇文章中.我们将介绍一下怎样创建并执行一个Cordova HTML5的应用到我们的Ubuntu手机中.本文的英文原文在"http://developer.ubuntu.com/en/apps/html-5/guides/cordova-guide/". 1)安装好我们的armhf chroot 假设开发人员已经看过我曾经的文章"Ubuntu SDK 安装"的话,你

如何使用Ubuntu手机平台中的照相机API来存储照片

在前面的一篇文章中"如何在Ubuntu手机中使用前置照相机",我们可以使用相应的C++代码来控制前后位置的照相机来拍照,但是我们又如何能够把所拍到的照片存储到相应的文件中呢?我们可以使用Qt 5.4版本中的Item所提供的一个新的功能"grabToImage".这样我们可以很方便地把我们得到的照片存到我们相应的目录中. 在Ubuntu手机平台中,由于安全的原因,我们的应用只可以访问自己所在的可以访问的目录.在这个例程中,我们使用了一些环境的变量来得到我们所需要的存储

如何在Ubuntu手机上实现一个FileDialog

前一段时间,有个开发者问我能否在Ubuntu手机中使用QtQuick.Dialogs来实现FileDialog.目前在手机上没有Qt这个库的实现.最主要的原因是它不使用unit grid的方式来布局,所以在真的手机上显得非常小.那么我们怎么才能实现同样的功能呢? 我们首先来查看一下我们的Ubuntu Qt所提供的API Dialog.这里我们有提供一个Dialog的control.我们可以仿照上面的例程来写出我们所需要的例程.另外,我们也需要使用另外一个APIFolderListModel.通过

说说iOS中的手势及触摸

一.响应链 在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应. 首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会.当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发生的视图,也就是用户触摸屏幕的地方.事件将沿着响应者链一直向下传递,直到被接受并做出处理.一般来说,第一响应者是个视图对象或者其子类对