Adobe
製品
Creative Suiteファミリー
Photoshopファミリー
Acrobatファミリー
Flash Platform
Digital Marketing Suite
Digital Enterprise Platform
Digital Publishing Suite
その他の製品一覧
ソリューション
コンテンツオーサリング
教育
金融機関
デジタルマーケティングソリューション
その他のソリューション
ラーニング サポート ダウンロード 会社情報
ご購入
アドビストア安心のサポート& サービス
アカデミック版のご購入学生、教職員、個人
ライセンスのご購入企業、教育機関、官公庁
販売パートナー
検索
 
情報 サインイン
ようこそ、 カート 注文状況 ユーザー登録
マイアカウント
サインアウト
サインインの目的 お客様のアカウントや体験版ダウンロード、製品の拡張機能、コミュニティエリアへのアクセスなどを管理するため
Adobe
製品 セクション   検索  
ソリューション 会社情報
サポート ラーニング
サインイン ようこそ、 注文状況 ユーザー登録
Qty:
Subtotal
Checkout
Adobe Developer Connection / Adobe AIRデベロッパーセンター /

マルチタッチ機能を活用した AIR 2.0 アプリケーション Touch Viewer の紹介

著者 廣畑 大雅 (taiga)氏

廣畑 大雅 (taiga)氏
  • taiga.jp

作成日

17 November 2009

ページ ツール

Facebookでシェア
Twitterでツイート
LinkedInでシェア
ブックマーク
印刷

Tags

必要条件

ユーザーレベル

初級

/content/dotcom/jp/devnet/air/articles/touchviewer/jcr:content/articlecontentAdobe/image/file

はじめに

Adobe AIR 2.0 の新機能であるマルチタッチ機能を活用したアプリケーション Touch Viewer は、指定ディレクトリまたは、マウントした USB ストレージデバイス直下に保存されている画像ファイル JPG、GIF、PNG 形式 を一覧表示して、選択した画像を閲覧することのできる Flex 4 ベースの画像ビューアアプリケーションです。

この記事では、Touch Viewer で使用している Adobe AIR 2.0 の API について、具体的に説明していきたいと思います。

ダウンロード

重要: このサンプルアプリケーションは、AIR 2 betaの機能を体験するために作成されています。お試しになる場合は、AIR 2 beta ランタイムを先にインストールする必要があります。なお、既にAIR 1.xのランタイムがOSにインストールされている場合は、上書きされてしまいますのでご注意ください。元に戻す場合は、AIR 2 beta ランタイムをアンインストールし、AIR 1.5.2 ランタイムをインストールします。詳細はリリースノート(英語) をご覧ください。

  • アプリケーション(.exe) beta 2対応
  • アプリケーション(.dmg) beta 2対応
  • ソースコード Google Code beta 2対応

開発環境

  • Adobe Flash Builder 4 beta 2
  • Adobe AIR 2.0 beta
  • HP TouchSmart tx2
    ( マルチタッチスクリーン検証機 )
  • Apple MacBook + Magic Mouse
    ( MacBook はマルチタッチトラックパッドが採用されているモデル )

Touch Viewer の主な機能

Touch Viewer では Adobe AIR 2.0 の新機能を活用して、以下の機能を実現しています。

  • マウスジェスチャーによる画像のサイズ、角度、明度のコントロール
    ( 要・Windows 7、Mac OS 10.6 以上でマルチタッチをサポートしている PC 環境 )
  • USB ストレージデバイスのマウント、アンマウント検知
    ( マウント時に、ドライブ直下の画像一覧を表示 )
  • 画像ファイル・タイプごとに関連するアプリケーションの起動
    ( Mac 版のみ対応。Windows 環境では「 Windows 画像と FAX ビューア」を起動 )
  • ネイティブインストーラ
Touch Viewer の画像リスト
図 1. Touch Viewer の画像リスト
Touch Viewer の画像プレビューウィンドウ
図 2. Touch Viewer の画像プレビューウィンドウ

マウスジェスチャーのマルチタッチイベントを取得する

Touch Viewer では、画像のリサイズ、回転、明度の変更処理を、TransformGestureEvent を取得してコントロールしています。Flex 4 で作成する ( Flash ベースの ) Adobe AIR 2.0 アプリケーションでマウスジェスチャーなどのマルチタッチイベントを取得するためには、Multitouch.inputMode プロパティの値を "gesture" (MultitouchInputMode.GESTURE) にする必要があります。この定数を定義しない限り、TransformGestureEvent は発行されません。そして MultitouchInputMode クラスには、他にも TOUCH_POINT という、マルチタッチ入力モードの定数が用意されていますが、GESTURE と併用することはできません。

例 : Multitouch.inputMode をマウスジェスチャーに定義

Multitouch.inputMode = MultitouchInputMode.GESTURE

TransformGestureEvent には、複数のイベントタイプが存在しますが、今回 Touch Viewer で使用しているイベントタイプは、以下の 4 つです。OS や ハードウェアの環境によって、取得できるイベントの種類や挙動がそれぞれ異なるので、テストや検証作業を慎重に行う必要があります。

  • TransformGestureEvent.GESTURE_PAN
  • TransformGestureEvent.GESTURE_ZOOM
    ( 筆者の環境では、Windows 環境でのみ取得できました )
  • TransformGestureEvent.GESTURE_ROTATE
    ( 筆者の環境では、Windows 環境でのみ取得できました )
  • TransformGestureEvent.GESTURE_SWIPE
    ( 筆者の環境では、Mac + Magic Mouse 環境でのみ取得できました )
TransformGestureEvent.GESTURE_ZOOM イベントの動作
図 3. TransformGestureEvent.GESTURE_ZOOM イベントの動作
TransformGestureEvent.GESTURE_ROTATE イベントの動作
図 4. TransformGestureEvent.GESTURE_ROTATE イベントの動作
TransformGestureEvent.GESTURE_PAN イベントの動作
図 5. TransformGestureEvent.GESTURE_PAN イベントの動作

取得したマルチタッチイベントの取り扱い

取得した TransformGestureEvent インスタンスには、さまざまなプロパティが含まれています。今回 Touch Viewer で使用している TransformGestureEvent の主なプロパティは、以下の通りです。

  • scaleX(scaleY)
    ( Windows 環境でサイズ変更処理に使用 )
  • rotation
    ( Windows 環境で角度変更処理に使用 )
  • offsetX
    ( Mac 環境でサイズ変更処理に使用 )
  • offsetY
    ( Mac 環境で角度変更処理に使用 )
  • localX(localY)
    ( 明度変更処理に使用 )
  • phase
    ( 明度変更処理に使用 )

これらプロパティの値の変化を、以下のコードのように、表示画像の scaleX(scaleY)、rotation、colorTransform プロパティに適応させます。

例 : TransformGestureEvent.GESTURE_ZOOM を利用した画像のサイズ変更処理

var _scale:Number = 1; addEventListener(TransformGestureEvent.GESTURE_ZOOM, gestureZoomHandler); function gestureZoomHandler(event:TransformGestureEvent):void { var minScale_:Number = 0.3; var maxScale_:Number = 2; _scale *= event.scaleX; if(_scale < minScale_ ) { _scale = minScale_; } else if(_scale > maxScale_ ) { _scale = maxScale_; } target.scaleX = target.scaleY = _scale; }

例 : TransformGestureEvent.GESTURE_ROTATE を利用した画像の角度変更処理

var _rotate:Number = 0; addEventListener(TransformGestureEvent.GESTURE_ROTATE, gestureRotateHandler); function gestureRotateHandler(event:TransformGestureEvent):void { _rotate += event.rotation; target.rotation = _rotate; }

例 : TransformGestureEvent.GESTURE_PAN を利用した画像の明度変更処理

var _panDX:Number; var _lightness:Number = 0; addEventListener(TransformGestureEvent.GESTURE_PAN, gesturePanHandler); function gesturePanHandler(event:TransformGestureEvent):void { switch (event.phase) { case GesturePhase.BEGIN : _panDX = event.localX; break; case GesturePhase.UPDATE : _lightness += (event.localX - _panDX) / 100; updateLightness(); break; } } function updateLightness():void { var d:Number; var colorTransform:ColorTransform = new ColorTransform(); if(_lightness < 0) { d = 1 + _lightness; colorTransform.redMultiplier = d; colorTransform.greenMultiplier = d; colorTransform.blueMultiplier = d; } else { d = 1 - _lightness; colorTransform.redMultiplier = d; colorTransform.greenMultiplier = d; colorTransform.blueMultiplier = d; colorTransform.redOffset = _lightness * 255; colorTransform.greenOffset = _lightness * 255; colorTransform.blueOffset = _lightness * 255; } target.transform.colorTransform = colorTransform; }

USB ストレージデバイスのマウント、アンマウント検知

USB ストレージデバイスのマウント、アンマウントを検知するためには、StorageVolumeInfo インスタンスに対して、StorageVolumeChangeEvent のリスナーイベントハンドラを定義します。
用意されているイベントタイプは、以下の2つです。

  • StorageVolumeChangeEvent.STORAGE_VOLUME_MOUNT
  • StorageVolumeChangeEvent.STORAGE_VOLUME_UNMOUNT

イベントハンドラの引数である StorageVolumeChangeEvent インスタンスの rootDirectory プロパティには、割り振られたドライブのパスが含まれているので、USB ストレージデバイスのマウントのタイミングに合わせて、簡単にドライブを閲覧、操作することができます。

例 : StorageVolumeChangeEvent のリスナーイベントハンドラを定義

var svi:StorageVolumeInfo; svi = StorageVolumeInfo.storageVolumeInfo; svi.addEventListener(StorageVolumeChangeEvent.STORAGE_VOLUME_MOUNT, storageVolumeMountHandler, false, 0, true); svi.addEventListener(StorageVolumeChangeEvent.STORAGE_VOLUME_UNMOUNT, storageVolumeUnmountHandler, false, 0, true); function storageVolumeMountHandler(event:StorageVolumeChangeEvent):void { var imageDirectory:File = event.rootDirectory; //TODO:任意の処理 } function storageVolumeUnmountHandler(event:StorageVolumeChangeEvent):void { //TODO:任意の処理 }

最後に

今回 Touch Viewer を作る過程で、Adobe AIR 2.0 の API について調べて、検証機として用意した PC の仕様を確認したり、サンプルプロジェクトをいくつか作成したりしましたが、OS やハードウェアの互換性を保つことが難しいことを実感しました。

Adobe AIR には、さまざまな環境でマルチタッチ機能を実現するための手段が用意されていますが、最終的にはハードウェアの性能に大きく左右される技術なので、今後どのように一般に普及させるかが課題になるのではないかと思います。

Tutorials and samples

Tutorials

  • Introducing Adobe AIR Launchpad
  • Licensing Adobe AIR applications on Android
  • Developing native extensions for Adobe AIR
  • Uploading images from CameraRoll and CameraUI

Samples

  • Licensing Adobe AIR applications on Android
  • Using web fonts with Adobe AIR 2.5
  • Using Badger for Adobe AIR applications

AIR blogs

More
02/02/2012 AIRKinect Extension is a Native Extension for use with Adobe AIR...
02/01/2012 Microsoft Kinect and Adobe AIR
02/01/2012 New Adobe Flash Player 11.2 beta for Desktops and Adobe AIR 3.2 beta
01/30/2012 Using charts inside Mobile Applications with Adobe AIR

AIR Cookbooks

More
01/20/2012 Skinnable Transform Tool
01/18/2012 Recording webcam video & audio in a flv file on local drive
12/12/2011 Date calculations using 'out-of-the-box' functions
11/29/2011 Button compatibility with NativeComboBox

製品

  • Creative Suiteファミリー
  • Photoshopファミリー
  • Acrobatファミリー
  • Flashプラットフォーム
  • Digital Marketing Suite
  • Digital Enterprise Suite
  • Digital Publishing Suite
  • モバイルアプリ

ソリューション

  • カスタマーエクスペリエンスマネジメント
  • コンテンツオーサリング
  • デジタルマーケティング

業種別ソリューション

  • 教育
  • 金融機関

サポート

  • ヘルプ&サポート
  • 注文と返品
  • ダウンロードに関するヘルプ
  • ユーザー登録に関するヘルプ

ラーニング

  • ADC: Adobe Developer Center
  • Adobe TV
  • Design Magazine
  • Photoshop Magazine
  • Focus In

ご購入方法

  • アドビストア
  • アカデミック版のご購入
  • ライセンスのご購入

ダウンロード

  • Adobe Reader
  • Adobe Flash Player
  • Adobe AIR
  • Adobe Shockwave Player

会社情報

  • プレスルーム
  • パートナープログラム
  • 企業の社会的責任(英語)
  • 採用情報
  • 投資家の皆様へ(英語)
  • イベント&セミナー
  • Legal(英語)
  • お問い合わせ
国・地域および言語の選択 日本(変更)
国・地域および言語の選択 閉じる

North America

Europe, Middle East and Africa

Asia Pacific

  • Canada - English
  • Canada - Français
  • Latinoamérica
  • México
  • United States

South America

  • Brasil
  • Africa - English
  • Belgium - English
  • Belgique - Français
  • België - Nederlands
  • България
  • Česká republika
  • Danmark
  • Eastern Europe - English
  • Eesti
  • España
  • France
  • Deutschland
  • Hrvatska
  • Ireland
  • Israel - English
  • Italia
  • Latvija
  • Lietuva
  • Luxembourg - Deutsch
  • Luxembourg - English
  • Luxembourg - Français
  • Magyarország
  • Middle East and North Africa - English
  • Moyen-Orient et Afrique du Nord - Français
  • Nederland
  • Norge
  • Österreich - Deutsch
  • Polska
  • Portugal
  • România
  • Россия
  • Schweiz - Deutsch
  • Suisse - Français
  • Svizzera - Italiano
  • Slovenija
  • Slovensko
  • Srbija
  • Suomi
  • Sverige
  • Türkiye
  • Україна
  • United Kingdom
  • Australia
  • 中国
  • 中國香港特別行政區
  • Hong Kong S.A.R. of China
  • India - English
  • 日本
  • 한국
  • New Zealand
  • Pacific - English
  • 台灣

Southeast Asia

  • Includes Indonesia, Malaysia, Philippines, Singapore, Thailand, and Vietnam - English

Copyright © 2012 Adobe Systems Incorporated. All rights reserved.

当Webサイトをご利用のお客様は、利用条件およびプライバシーポリシー(2011年9月30日更新)にご同意いただいたものとみなされます。

Reviewed by TRUSTe: site privacy statement