ScaleGestureDetector使用注意事项

注:一定要通过view的onTouchEvent调用mScaleGestureDetector.onTouchEvent(ev);,只有这样

才能调用回调函数:onScaleBegin

具体可以参加:android源码:KenBurnsActivity.java

下面是转载的文章:


Detects transformation gestures involving more than one pointer ("multitouch") using the supplied MotionEvents.

 TheScaleGestureDetector.OnScaleGestureListener callback will notify users when a particular gesture event has occurred. This class should only be used with MotionEvents reported via touch. To use this class:
  1. public class TouchView extends View {

  2.  private Context mContext;
  3.  private Paint mPaint;
  4.  private Rect mRect;
  5.  private ScaleGestureDetector mScaleGestureDetector;
  6.  
  7.  public TouchView(Context context) {
  8.   super(context);
  9.   mContext = context;
  10.   mPaint = new Paint();
  11.   mPaint.setColor(Color.BLUE);
  12.   mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
  13.   mRect = new Rect();
  14.   mRect.left = 10;
  15.   mRect.top = 10;
  16.   mRect.right = 300;
  17.   mRect.bottom = 400;
  18.   
  19.   mScaleGestureDetector = new ScaleGestureDetector(context, listener);
  20.  }
  21.  
  22.  OnScaleGestureListener listener = new OnScaleGestureListener() {
  23.   
  24.   public void onScaleEnd(ScaleGestureDetector detector) {
  25.    // TODO Auto-generated method stub
  26.    Log.i("OnScaleGestureListener", "onScaleEnd");
  27.   }
  28.   
  29.   public boolean onScaleBegin(ScaleGestureDetector detector) {
  30.    // TODO Auto-generated method stub
  31.    Log.i("OnScaleGestureListener", "onScaleBegin detector.getCurrentSpan() = " + detector.getCurrentSpan());
  32.    detector.getCurrentSpan();
  33.    return true;
  34.   }
  35.   
  36.   public boolean onScale(ScaleGestureDetector detector) {
  37.    // TODO Auto-generated method stub
  38.    float cur = detector.getCurrentSpan();
  39.    float pre = detector.getPreviousSpan();
  40.    float cp = cur - pre;
  41.    Log.i("OnScaleGestureListener", "onScale detector.getCurrentSpan() = " + cur
  42.      + detector.getPreviousSpan() = " + pre 
  43.      + " cur - pre = " + (cur - pre));
  44.    if (cp < -100 && !mScaled) {
  45.     mScaled = true;
  46.     mRect.left = 10+ 50;
  47.     mRect.top = 10 + 50;
  48.     mRect.right = 300 - 50;
  49.     mRect.bottom = 400 - 50;
  50.     invalidate();
  51.    } else if (cp > 100 && mScaled) {
  52.     mScaled = false;
  53.     mRect.left = 10;
  54.     mRect.top = 10 ;
  55.     mRect.right = 300 ;
  56.     mRect.bottom = 400;
  57.     invalidate();
  58.    }
  59.    return false;
  60.   }
  61.  };

  62.  boolean mScaled = false;
  63.  /*@Override
  64.  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  65.   int widthMode = MeasureSpec.getMode(widthMeasureSpec);
  66.   int width = MeasureSpec.getSize(widthMeasureSpec);
  67.   int heightMode = MeasureSpec.getMode(heightMeasureSpec);
  68.   int height = MeasureSpec.getSize(heightMeasureSpec);
  69.   super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  70.  }*/



  71.  @Override
  72.  protected void onDraw(Canvas canvas) {
  73.   canvas.drawRect(mRect, mPaint);
  74.  }



  75.  @Override
  76.  public boolean onTouchEvent(MotionEvent event) {
  77.   System.out.println("event.getPointerCount() : " + event.getPointerCount());
  78.   mScaleGestureDetector.onTouchEvent(event);
  79.   return true;
  80.  }
  81. }

转载于:https://www.cnblogs.com/tanqiantot/archive/2012/10/12/3126845.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 静态成员函数

#include <iostream> using namespace std; #include <string>class Person{public://静态成员函数特点://1程序共享一个函数//2静态成员函数只能访问静态成员变量static void func(){cout << "func调用" << endl;m_A 100;//m. _B 100; //…

提高编写CSS代码效率的10个习惯

提高编写CSS代码效率的10个习惯1、保持一贯性。 就像其它的任何事一样&#xff0c;值得一直保持一贯性。保持连贯性&#xff0c;而不是想到什么就给id和class命名什么。 CSS的级联样式有利于加深你的记忆&#xff0c;而且充分利用样式的继承去设置样式表。 首先声明通用的部分的…

hdu 1257 最少拦截系统 (DP)

点击打开链接 #include"stdio.h" int main() {int a[10011],b[10011];int i,j,c,n;while(scanf("%d",&n)!EOF){c1;for(i0;i<n;i)scanf("%d",&a[i]);b[0]a[0];for(i1;i<n;i){for(j0;j<c;j){if(a[i]<b[j])break;}b[j]a[i];if(…

C++ 友元函数

生活中你的家有客厅(Public),有你的卧室(Private) 客厅所有来的客人都可以进去&#xff0c;但是你的卧室是私有的&#xff0c;也就是说只有你能进去 但是呢&#xff0c;你也可以允许你的好闺蜜好基友进去。 在程序里&#xff0c;有些私有属性也想让类外特殊的一些函数或者类进行…

九度1377缓变序列

#include<stdio.h> #include<string.h> int n,m,k,i,j,minN,a[10003]; main() {while(~scanf("%d",&n)){memset(a,0,sizeof(a));minN0x7ffffff,m0,j0;for(i0;i<n;i)scanf("%d",&k),minNminN<k?minN:k,a[k]0?m:0,a[k];if(m1)pr…

关于计算机类课程实验教学的思考

由于计算机机房的限制&#xff0c;没有安装投影仪以及计算机控制管理软件&#xff0c;所以单纯的讲解效果非常不好。老师在上面讲&#xff0c;学生在下面干什么根本不知道。由于教授的实验课和理论课关系不是非常密切。试验的主要内容是网页设计&#xff0c;也就是如何利用Drea…

第四章类和对象 习题答案

一&#xff0e;选择题1.能提供封装的C的下列关键字是&#xff08;C&#xff09;A.whileB. unionC. classD. for2.在下面所列项中&#xff0c;不是面向对象的特点的是&#xff08;C&#xff09;A. 多面性B. 抽象性和封装性C. 多线程和多任务D. 继承性3.下面选项中&#xff0c;对…

在Javascript中闭包(Closure)

一、什么是闭包&#xff1f; “官方”的解释是&#xff1a;所谓“闭包”&#xff0c;指的是一个拥有许多变量和绑定了这些变量的环境的表达式&#xff08;通常是一个函数&#xff09;&#xff0c;因而这些变量也是该表达式的一部分。相信很少有人能直接看懂这句话&#xff0c;因…

C++ 文件写操作

#include <fstream> #include<iostream> using namespace std;void test01(){ofstream ofs;ofs.open("test.txt",ios :: out);ofs << "姓名:张三"<< endl;ofs << "性别:男"<< endl;ofs << "年龄…

JS如何获取URL

JS如何获取URL 一、var urldocument.location; url "www.abc.com/sports/def.aspx"; var r /\/(\w)\.aspx/; alert(url.match(r)[1]); alert(r.exec(url)[1]);二、 var url document.locationurl " http://localhost:8080/Customer/index?tokenghfghfghfghfg…

winform 分页控件分享(二)

大数量分页&#xff0c;使用存储过程。 这个存储过程是网络上考的&#xff0c;呵呵。我把它给贴出来&#xff0c;希望原作者别砸我砖头。。。。。 ALTER PROCEDURE SP_Pagination/**//****************************************************************** 千万数量级分页存…

C++ 二进制文件写操作

#include<iostream> using namespace std; #include<fstream>class Person { public:char m_Name[64]; //姓名int m_Age; //年龄};void test01(){//1、包含头文件//2.创建流对象ofstream ofs("person.txt",ios::out | ios::binary);//3、打开文件//ofs.o…

转载:数据库表结构设计方法及原则

在目前的企业信息系统中&#xff0c;数据库还是最佳的数据存储方式&#xff0c;虽然已经有很多的书籍在指导我们进行数据库设计&#xff0c;但应该那种方式是设计数据库的表结构的最好方 法、设计时应遵从什么样的原则、四个范式如何能够用一种方式达到顺畅的应用等是我一直在思…

C++ 二进制文件读操作

读二进制文件 二进制方式读文件主要利用流对象调用成员函数read 函数原型:[ istream& read(char *buffer,int len); 参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数 示例: #include <fstream> #include <string> #include<iostream>…

成为中国最好的Magento开发公司

MEC电子商务是国内首家Magento定制服务公司。 对于Magento开发&#xff0c;我们的目标是做中国最好的Magento开发公司&#xff0c;但这是一个无止境的追求&#xff0c;从我们2007年创立之初至现在我们积累了大量国际知名品牌的案例&#xff0c;发布了3个MEC Magento系列产品&am…

基于USB通信的开关量输入输出板

难点在于usb通信。以及上位机程序 两个方案&#xff1a; 1.基于stm32的&#xff0c;自带usb口&#xff0c;tqfp100封装&#xff0c;可以保证16输 入&#xff0c;16输出的i/o。 2.基于cy68013fpga的方案&#xff0c;有现成的开发板&#xff0c;应该上手 很快。需要熟悉fpga和680…

C++ 使用模板Template

template --声明创建模板I typename -- 表面其后面的符号是一种数据类型&#xff0c;可以用class代替 T --- 通用的数据类型&#xff0c;名称可以替换&#xff0c;通常为大写字母 使用模板之前&#xff1a; #include<iostream> using namespace std; #include<strin…

程序员常用字体(vs2008字体修改方案)

字体不仅是设计师手中重要的武器&#xff0c;对我们开发人员来说&#xff0c;字体的选择也有许多讲究&#xff0c;一个好的、适合展示代码的字体&#xff0c;应该具备以下要素&#xff1a; 等宽的字符简洁、清晰并且规范的字符形状支持ASCII码为128以上的扩展字符集与字符同等宽…

C++ 使用模板需要注意的事情

总结: ●使用模板时必须确定出通用数据类型T,并且能够推争出一致的类型 #include<iostream> using namespace std; #include<string> #include<fstream>//函数模板注意事项 template<class T> //typename 可以替换成class void mySwap(T&a, T&am…

三分法解决凸(凹)函数极值问题

二分法只适用与线性函数&#xff0c;当函数脱离线性而呈现凸性或者凹性的时候&#xff0c;三分是很有必要的。 三分过程如下图&#xff1a; 凸函数&#xff1a; 凹函数&#xff1a; 实现方法&#xff1a; double Calc(double p) {/*...*/ }double Solve(double MIN, double MAX…