求知 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 火云堂 讲座吧   成长之路  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 

Android开发教程
Android 开发环境配置
Android 架构
Android 应用组件
Android Hello World示例
Android 资源组织和访问
Android Activity
Android Service
Android 广播接收器
Android 内容提供者
Android 碎片/片段
Android Intent过滤器
Android UI布局
Android UI控件
Android 事件处理
Android 样式和主题
Android 自定义组件
Android 拖放
Android 通知
Android 基于位置服务
Android 发送电子邮件
Android 发送短信/SMS
Android 拨打电话
发布Android应用
ndroid Alertdialog
Android Animation实例
Android音频捕获
Android音频管理器实例
Android
Android最佳实践
Android Bluetooth实例
Android Camera
Android Clipboard
Android自定义字体
Android数据备份
Android Gestures/手势
Android图片效果
Android图片切换
Android内部存储
Android JetPlayer实例
Android JSON解析器
Android加载Spinner
Android本地化
Android登录实例
Android MediaPlayer
 
 

Android Gestures/手势
89 次浏览
21次  
 捐助

Android提供了特殊类型的触摸屏事件,如掐,双击,滚动,长按和退缩。这些都被称为手势。

Android提供GestureDetector类接收移动事件,并告诉我们,这些事件是否有对应手势。要使用它,需要创建GestureDetector对象,然后扩展另一个类GestureDetector.SimpleOnGestureListener充当监听器,并覆盖一些方法。它的语法如下:

GestureDetector myG;  myG = new GestureDetector(this,new Gesture());
    class Gesture extends GestureDetector.SimpleOnGestureListener{
     public boolean onSingleTapUp(MotionEvent ev) {
     }
     public void onLongPress(MotionEvent ev) {
     }
      public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
     float distanceY) {
     }
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
     float velocityY) {
     }
  }
  }

处理捏手势

Android提供ScaleGestureDetector类来处理如:捏等手势。为了使用它,需要实例化这个类的一个对象。它的语法如下:

ScaleGestureDetector SGD;  SGD = new ScaleGestureDetector(this,new ScaleListener());

第一个参数是上下文,第二个参数是事件侦听器。必须定义事件侦听器并覆盖 onTouchEvent 函数,使其工作。它的语法如下:

public boolean onTouchEvent(MotionEvent ev) {
     SGD.onTouchEvent(ev);
     return true;
      }
     private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
     @Override     public boolean onScale(ScaleGestureDetector detector) {
        float scale = detector.getScaleFactor();
        return true;
        }
   }

除了捏手势,还有其它方法 avaialible 通知的详细信息的触摸事件。它们如下:

例子

这里有一个例子演示如何使用ScaleGestureDetector类。它创建了一个基本的应用程序,放大和捏缩小。

为了试验这个例子,可以在实际设备或仿真器,触摸屏启用运行此程序。

以下是修改后的主活动文件的内容?src/com.yiibai.gestures/MainActivity.java.

package com.example.gestures;
    import android.app.Activity;
    import android.graphics.Matrix;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MotionEvent;
    import android.view.ScaleGestureDetector;
    import android.widget.ImageView;
    public class MainActivity extends Activity {
       private ImageView img;
       private Matrix matrix = new Matrix();
       private float scale = 1f;
       private ScaleGestureDetector SGD;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img = (ImageView)findViewById(R.id.imageView1);
        SGD = new ScaleGestureDetector(this,new ScaleListener());
     }
     @Override
     public boolean onTouchEvent(MotionEvent ev) {
        SGD.onTouchEvent(ev);
        return true;
     }
     private class ScaleListener extends ScaleGestureDetector.
     SimpleOnScaleGestureListener {
     @Override     public boolean onScale(ScaleGestureDetector detector) {
        scale *= detector.getScaleFactor();
        scale = Math.max(0.1f, Math.min(scale, 5.0f));
        matrix.setScale(scale, scale);
        img.setImageMatrix(matrix);
        return true;
     }
  } 
    @Override
     public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
     }
    }

以下是XML的经修改?res/layout/activity_main.xml. 的内容

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:paddingBottom="@dimen/activity_vertical_margin"
     android:paddingLeft="@dimen/activity_horizontal_margin"
     android:paddingRight="@dimen/activity_horizontal_margin"
     android:paddingTop="@dimen/activity_vertical_margin"
     tools:context=".MainActivity" >
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
       <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/textView1"
        android:scaleType="matrix"
        android:src="@android:drawable/sym_def_app_icon" />
    </RelativeLayout>

以下是?res/values/string.xml. 的内容

<?xml version="1.0" encoding="utf-8"?>
    <resources>
       <string name="app_name">Gestures</string>
     <string name="action_settings">Settings</string>
     <string name="hello_world">Pinch to zoom in or out!</string>
    </resources>

以下是 AndroidManifest.xml 文件的内容

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.yiibai.gestures"
     android:versionCode="1"
     android:versionName="1.0" >
       <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
       <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
           android:name="com.yiibai.gestures.MainActivity"
           android:label="@string/app_name" >
           <intent-filter>
              <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>
     </application>
    </manifest>

让我们试着运行Gestures应用程序。我假设已经连接实际Android的移动设备到计算机。启动应用程序之前,会显示如下窗口,选择要运行Android的应用程序的选项。

选择移动设备作为一个选项,然后检查移动设备将显示默认屏幕:

现在只是把两个手指放在android屏幕,并且将它们分开的一部分,会看到Android的图像缩大。这显示在下面的图片:

现在,再次将两个手指在屏幕的Android,并尝试关闭它们,会看到Android的图像现在缩小。这显示在下面的图片:


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



89 次浏览
21次
 捐助
 

每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号