zoukankan      html  css  js  c++  java
  • ScaleGestureDetector之手势缩放

    概述

      根据接收的MotionEvent, 侦测由多个触点(多点触控)引发的变形手势。callback方法 ScaleGestureDetector.OnScaleGestureListener 会在特定手势事件发生时通知用户。该类仅能和Touch事件引发的MotionEvent配合使用。使用该类需要
      为你的View创建ScaleGestureDetector 实例
      确保在onTouchEvent(MotionEvent)方法中调用 onTouchEvent (MotionEvent). [译者注:前者为该类的onTouchEvent方法,后者为View的onTouchEvent方法。] 在事件发生时,定义在callback中的方法会被调用。

    [html] view plain copy
     print?
    1. <?xml version="1.0" encoding="utf-8"?>  
    2.  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.      android:layout_width="fill_parent"  
    4.      android:layout_height="fill_parent"  
    5.      android:orientation="vertical" >  
    6.    
    7.      <Button   
    8.          android:id="@+id/button"  
    9.          android:layout_width="fill_parent"  
    10.          android:layout_height="wrap_content"  
    11.          android:text="显示图片"  
    12.          />  
    13.        
    14.      <SurfaceView   
    15.          android:id="@+id/surfaceview"  
    16.          android:layout_width="fill_parent"  
    17.          android:layout_height="fill_parent"  
    18.          />  
    19.    
    20.  </LinearLayout>  
    java文件,主要是实现按钮的监听和定义一个类实现ScaleGestureDetector.OnScaleGestureListener接口:
    [java] view plain copy
     print?
    1. package com.kingfly;  
    2.   
    3. import android.app.Activity;  
    4. import android.graphics.Bitmap;  
    5. import android.graphics.BitmapFactory;  
    6. import android.graphics.Canvas;  
    7. import android.graphics.Color;  
    8. import android.graphics.Matrix;  
    9. import android.graphics.Rect;  
    10. import android.os.Bundle;  
    11. import android.view.MotionEvent;  
    12. import android.view.ScaleGestureDetector;  
    13. import android.view.SurfaceHolder;  
    14. import android.view.SurfaceView;  
    15. import android.view.View;  
    16. import android.widget.Button;  
    17.   
    18. public class ShoushiActivity extends Activity {  
    19.   
    20.     private Button mButton = null;  
    21.     private SurfaceView mSurfaceView = null;  
    22.     private SurfaceHolder mSurfaceHolder = null;  
    23.     private ScaleGestureDetector mScaleGestureDetector = null;  
    24.     private Bitmap mBitmap = null;  
    25.   
    26.     /** Called when the activity is first created. */  
    27.     @Override  
    28.     public void onCreate(Bundle savedInstanceState) {  
    29.         super.onCreate(savedInstanceState);  
    30.         setContentView(R.layout.main);  
    31.   
    32.         mSurfaceView = (SurfaceView) this.findViewById(R.id.surfaceview);  
    33.         mSurfaceHolder = mSurfaceView.getHolder();  
    34.         mScaleGestureDetector = new ScaleGestureDetector(this,  
    35.                 new ScaleGestureListener());  
    36.         mButton = (Button) this.findViewById(R.id.button);  
    37.         // 按钮监听  
    38.         mButton.setOnClickListener(new View.OnClickListener() {  
    39.   
    40.             public void onClick(View v) {  
    41.                 // TODO Auto-generated method stub  
    42.                 mBitmap = BitmapFactory.decodeResource(getResources(),  
    43.                         R.drawable.mmm);  
    44.                 // 锁定整个SurfaceView  
    45.                 Canvas mCanvas = mSurfaceHolder.lockCanvas();  
    46.                 // 画图  
    47.                 mCanvas.drawBitmap(mBitmap, 0f, 0f, null);  
    48.                 // 绘制完成,提交修改  
    49.                 mSurfaceHolder.unlockCanvasAndPost(mCanvas);  
    50.                 // 重新锁一次  
    51.                 mSurfaceHolder.lockCanvas(new Rect(0000));  
    52.                 mSurfaceHolder.unlockCanvasAndPost(mCanvas);  
    53.             }  
    54.         });  
    55.   
    56.     }  
    57.   
    58.     @Override  
    59.     public boolean onTouchEvent(MotionEvent event) {  
    60.         // 返回给ScaleGestureDetector来处理  
    61.         return mScaleGestureDetector.onTouchEvent(event);  
    62.     }  
    63.   
    64.     public class ScaleGestureListener implements  
    65.             ScaleGestureDetector.OnScaleGestureListener {  
    66.   
    67.         public boolean onScale(ScaleGestureDetector detector) {  
    68.             // TODO Auto-generated method stub  
    69.   
    70.             Matrix mMatrix = new Matrix();  
    71.             // 缩放比例  
    72.             float scale = detector.getScaleFactor() / 3;  
    73.             mMatrix.setScale(scale, scale);  
    74.   
    75.             // 锁定整个SurfaceView  
    76.             Canvas mCanvas = mSurfaceHolder.lockCanvas();  
    77.             // 清屏  
    78.             mCanvas.drawColor(Color.BLACK);  
    79.             // 画缩放后的图  
    80.             mCanvas.drawBitmap(mBitmap, mMatrix, null);  
    81.             // 绘制完成,提交修改  
    82.             mSurfaceHolder.unlockCanvasAndPost(mCanvas);  
    83.             // 重新锁一次  
    84.             mSurfaceHolder.lockCanvas(new Rect(0000));  
    85.             mSurfaceHolder.unlockCanvasAndPost(mCanvas);  
    86.   
    87.             return false;  
    88.         }  
    89.   
    90.         public boolean onScaleBegin(ScaleGestureDetector detector) {  
    91.             // TODO Auto-generated method stub  
    92.             // 一定要返回true才会进入onScale()这个函数  
    93.             return true;  
    94.         }  
    95.   
    96.         public void onScaleEnd(ScaleGestureDetector detector) {  
    97.             // TODO Auto-generated method stub  
    98.   
    99.         }  
    100.   
    101.     }  
    102.   
    103. }  

  • 相关阅读:
    selenium---元素定位(find_element)
    selenium---八种定位元素方法
    selenium---环境配置
    vue el-table 自适应表格内容宽度
    另类的开发环境搭建
    基于Django+celery二次开发动态配置定时任务 ( 二)
    基于datax的数据同步平台
    mysql常用日期、时间查询
    MySQL数据库管理
    mysql5.7.20多实例编译安装
  • 原文地址:https://www.cnblogs.com/vegetate/p/9997235.html
Copyright © 2011-2022 走看看