xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context=".MainActivity" >
  6.  
  7. <ImageView
  8. android:id="@+id/imgage"
  9. android:src="@drawable/test"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:layout_centerHorizontal="true"
  13. android:layout_centerVertical="true"
  14. />
  15.  
  16. </RelativeLayout>

java

  1. package com.example.touchdemo;
  2.  
  3. import android.os.Bundle;
  4. import android.app.Activity;
  5. import android.content.res.Resources;
  6. import android.util.DisplayMetrics;
  7. import android.util.Log;
  8. import android.view.Menu;
  9. import android.view.MotionEvent;
  10. import android.view.View;
  11. import android.view.View.OnTouchListener;
  12. import android.widget.ImageView;
  13. import android.widget.RelativeLayout;
  14. import android.widget.Toast;
  15.  
  16. public class MainActivity extends Activity {
  17. private ImageView image;
  18. float lastDistance = -1;
  19. float x0 = 0;
  20. float y0 = 0;
  21. private int screenWidth;
  22. private int screenHeight;
  23.  
  24. @Override
  25. protected void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.activity_main);
  28.  
  29. image = (ImageView) findViewById(R.id.imgage);
  30. //获得屏幕宽高 不让出界
  31. DisplayMetrics dm = getResources().getDisplayMetrics();
  32. screenWidth = dm.widthPixels;
  33. screenHeight = dm.heightPixels-100;
  34. image.setOnTouchListener(new OnTouchListener() {
  35.  
  36. private float x;
  37. private float y;
  38.  
  39. @Override
  40. public boolean onTouch(View v,final MotionEvent event) {
  41. // TODO Auto-generated method stub
  42. int action = event.getAction();
  43. Log.i("TAG","触摸开始......");
  44. switch (action) {
  45. case MotionEvent.ACTION_DOWN:
  46. //getX()是表示Widget相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕)
  47. x = event.getRawX();
  48. y = event.getRawX();
  49. break;
  50.  
  51. case MotionEvent.ACTION_MOVE:
  52. //得到触摸点的个数
  53. int count = event.getPointerCount();
  54. Log.i("TAG","触摸点的个数:"+count);
  55.  
  56. if(count > 1){
  57. Log.i("TAG", event.getX(0)+","+event.getY(0)+"|"+event.getX(1)+","+event.getY(1));
  58. //获得两点的坐标差
  59. float distanceX = event.getX(0) - event.getX(1);
  60. float distanceY = event.getY(0) - event.getY(1);
  61. //获得两点之间的距离
  62. float betweenDistance = (float) Math.sqrt(distanceX*distanceX + distanceY*distanceY);
  63. Log.i("TAG","当前两点之间的新距离:"+betweenDistance);
  64.  
  65. if(betweenDistance < 1){
  66. lastDistance = betweenDistance;
  67.  
  68. }else if((betweenDistance - lastDistance) > 5){
  69. //放大
  70. lastDistance = betweenDistance;
  71. //获得布局参数
  72. RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) image.getLayoutParams();
  73. params.width = (int) (image.getWidth()*1.1f);
  74. params.height = (int) (image.getHeight()*1.1f);
  75. image.setLayoutParams(params);
  76. }else if((lastDistance - betweenDistance) > 5){
  77. lastDistance = betweenDistance;
  78. //获得布局参数
  79. RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) image.getLayoutParams();
  80. params.width = (int) (image.getWidth()*0.9f);
  81. params.height = (int) (image.getHeight()*0.9f);
  82. image.setLayoutParams(params);
  83. }
  84.  
  85. }else if(count == 1){
  86.  
  87. //移动距离
  88. float rawX = event.getRawX()-x;
  89. float rawy = event.getRawY()-y;
  90. //定义新的
  91. int left = (int) (image.getLeft()+rawX);
  92. int top = (int) (image.getTop()+rawy);
  93. int right = (int) (image.getRight()+rawX);
  94. int bottom = (int) (image.getBottom()+rawy);
  95. // 设置不能出界
  96. if (left < 0) {
  97. left = 0;
  98. right = left + v.getWidth();
  99. }
  100.  
  101. if (right > screenWidth) {
  102. right = screenWidth;
  103. left = right - v.getWidth();
  104. }
  105.  
  106. if (top < 0) {
  107. top = 0;
  108. bottom = top + v.getHeight();
  109. }
  110.  
  111. if (bottom > screenHeight) {
  112. bottom = screenHeight;
  113. top = bottom - v.getHeight();
  114. }
  115.  
  116. //赋值
  117. image.layout(left, top, right, bottom);
  118. //改成新的按下作标
  119. x=event.getRawX();
  120. y=event.getRawY();
  121. /*return false;*/
  122. }
  123. break;
  124.  
  125. }
  126.  
  127. return true;
  128. }
  129. });
  130. }
  131. //全局移动
  132. @Override
  133. public boolean onTouchEvent(MotionEvent event) {
  134. // TODO Auto-generated method stub
  135. /*image.setX(event.getX());
  136. image.setY(event.getY()); */
  137. return true;
  138. }
  139.  
  140. }

android——单点触控移动,多点触控放大缩小的更多相关文章

  1. 新鲜出炉:appium2.0+ 单点触控和多点触控新的解决方案

    在 appium2.0 之前,在移动端设备上的触屏操作,单手指触屏和多手指触屏分别是由 TouchAction 类,Multiaction 类实现的. 在 appium2.0 之后,这 2 个方法将会 ...

  2. android小程序-电子钢琴-多点触控

    我在第一篇博客<android小程序-电子钢琴-滑动连续响应>中实现了一个简单地7键钢琴,这几天把它又完善了一下,增加了多点触控,按键也增加了一个低音区和一个高音区,使得又可以多弹一点简单 ...

  3. android 百度最新地图sdk包怎么去除 放大缩小按钮

    // 隐藏缩放控件 int childCount = mMapView.getChildCount(); View zoom = null; ; i < childCount; i++) { V ...

  4. Android多点触控技术

    1 简介 Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC.Motorola和Samsung等知名厂商只要使用电容屏触控原理的手机均可以支持多点触控Multitouc ...

  5. 【朝花夕拾】Android自定义View篇之(八)多点触控(上)MotionEvent简介

    前言 在前面的文章中,介绍了不少触摸相关的知识,但都是基于单点触控的,即一次只用一根手指.但是在实际使用App中,常常是多根手指同时操作,这就需要用到多点触控相关的知识了.多点触控是在Android2 ...

  6. Android多点触控手势基础

    处理多点触控手势 多点触控就是同时把一根以上的手指放在屏幕上. 再继续往下以前需要补充一些名词: 触控手势:就是把一根或者几根手指放在屏幕上做各种动作,其中包括保留一根手指的前提下,拿起或者放下其余的 ...

  7. android 多点触控

    多点触控 1.多点触控从字面意思讲就是你用大于等于2根的手指触摸子啊手机屏幕上. Android中监听触摸事件是onTouchEvent方法,它的参数为MotionEvent,下面列举MotionEv ...

  8. WPF布局之让你的控件随着窗口等比放大缩小,适应多分辨率满屏填充应用

    一直以来,我们设计windows应用程序,都是将控件的尺寸定好,无论窗体大小怎么变,都不会改变,这样的设计对于一般的应用程序来说是没有问题的,但是对于一些比较特殊的应用,比如有背景图片的,需要铺面整个 ...

  9. Android 本地/网路下载图片实现放大缩小

     Android 本地加载/网路下载图片实现放大缩小拖拉效果,自定义控件. package com.example.ImageViewCustom; import android.app.Activi ...

  10. Android 多点触控与简单手势(一)

    现在一般的Android手机都会使用电容触摸屏最少可以支持两点触摸,多的可能是七八个,所以基本上都会支持多点触控, android系统中应用程序可以使用多点触控的事件来完成各种手势和场景需求. And ...

随机推荐

  1. Java学习-021-Properties 获取配置项对应的值

    在日常的脚本编写过程中,通常会获取配置文件中的配置项,以执行相应的业务逻辑. 小二上码...若有不足之处,敬请大神指正,不胜感激! 获取配置项值的源码如下所示: /** * Get value fro ...

  2. action script 3如何检测播放器域

    检测播放器域   用户在上面观看媒体内容的网页的 URL 和域并非始终随时可用.如果托管网站允许,您可使用 ExternalInterface 类获取确切 URL.尽管如此,允许第三方视频播放器的一些 ...

  3. Object转换为json格式

    public String toJSONString(Object obj)     {              SerializeWriter serializewriter = new Seri ...

  4. Aspose.Words 开发时遇到的问题

    问题一 Document doc.Save(Response, "学员报名表.pdf", ContentDisposition.Inline, null); 执行后没有效果,因为异 ...

  5. php 如何进入mysql数据库

    我是初学者,有两台电脑,进入数据库通用的方法直接找mysql.exe,如下例: F:\Program Files\wamp\bin\mysql\mysql5.5.20\bin

  6. 与(and)&&

    /与(and)&& var box = (5>3)&&(4>3); alert(box); //true 如果脸变的操作数有一个操作数不是boolean值得 ...

  7. Oracle Flashback Technologies - 闪回查询

    Oracle Flashback Technologies - 闪回查询 查看表中,某行数据的修改记录 #创建一个表,并插入和修改数据 SQL> create table y3(id )); T ...

  8. Java基础之写文件——使用Formatter对象加载缓冲区(UsingAFormatter)

    控制台程序,使用Formatter对象将写入文件的数据准备好. 使用Formatter对象的format()方法,将数据值格式化到视图缓冲区charBuf中. import static java.n ...

  9. jquery网址

    各种分布图的插件:http://echarts.baidu.com/demo.html

  10. MyCat:在.NET Core中使用MyCat

    http://www.cnblogs.com/yuangang/p/5830716.html