博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多点触控实现图面的放大与缩小
阅读量:7106 次
发布时间:2019-06-28

本文共 2917 字,大约阅读时间需要 9 分钟。

hot3.png

package com.example.zzzz;

import android.app.Activity;

import android.graphics.Matrix;
import android.graphics.PointF;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class TouchActivity extends Activity {

   
 private static final int NONE = 0;
 private static final int MOVE = 1;
 private static final int ZOOM = 2;
 private static final int ROTATION = 1; 
 private int mode = NONE;
 private Matrix matrix = new Matrix();
 private Matrix savedMatrix = new Matrix();
 private PointF start = new PointF();
 private PointF mid = new PointF();
 private float s = 0;
 private float oldDistance;
 private int rotate = NONE;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        ImageView imageView = (ImageView)findViewById(R.id.imageView1);
        imageView.setOnTouchListener(new OnTouchListener()
        {
   @Override
   public boolean onTouch(View view, MotionEvent event) {
    ImageView imageView = (ImageView)view;
    switch (event.getAction()&MotionEvent.ACTION_MASK) {
    case MotionEvent.ACTION_DOWN:
     savedMatrix.set(matrix);
     start.set(event.getX(), event.getY());
     mode = MOVE;
     rotate = NONE;
     break;
    case MotionEvent.ACTION_UP:
    case MotionEvent.ACTION_POINTER_UP:
     mode = NONE;
     break;
    case MotionEvent.ACTION_POINTER_DOWN:
     oldDistance = (float)Math.sqrt((event.getX(0)-event.getX(1))*(event.getX(0)-event.getX(1))+(event.getY(0)-event.getY(1))*(event.getY(0)-event.getY(1)));
     if (oldDistance > 10f) {
      savedMatrix.set(matrix);
      mid.set((event.getX(0)+event.getX(1))/2, (event.getY(0)+event.getY(1))/2);
      mode = ZOOM;
     }
    case MotionEvent.ACTION_MOVE:
     if (mode == MOVE)
     {
      if(rotate == NONE) {
       savedMatrix.set(matrix);
       mid.set(event.getX(), event.getY());
       rotate = ROTATION;
      }
      else {
       matrix.set(savedMatrix);
       double a = Math.atan((mid.y-start.y)/(mid.x-start.x));
       double b = Math.atan((event.getY()-mid.y)/(event.getX()-mid.x));
       if ((b - a < Math.PI/2 && b - a > Math.PI / 18)||((b + Math.PI) % Math.PI - a < Math.PI/2 && (b + Math.PI) % Math.PI - a > Math.PI / 18)) {
        matrix.postScale((float)0.9, (float)0.9);
       }
       else if ((a - b < Math.PI / 2 && a - b > Math.PI / 18)||((a + Math.PI) % Math.PI - b < Math.PI/2 && (a + Math.PI) % Math.PI - b > Math.PI / 18)) {
        matrix.postScale((float)1.1, (float)1.1);
       }
       start.set(event.getX(), event.getY());
       rotate = NONE;
      }
     }
     else if(mode == ZOOM)
     {
      float newDistance;
      newDistance = (float)Math.sqrt((event.getX(0)-event.getX(1))*(event.getX(0)-event.getX(1))+(event.getY(0)-event.getY(1))*(event.getY(0)-event.getY(1)));
      if(newDistance > 10f) {
       matrix.set(savedMatrix);
       matrix.postScale(newDistance/oldDistance, newDistance/oldDistance, mid.x, mid.y);
       oldDistance = newDistance;
       savedMatrix.set(matrix);
      }
     }
     break;
    }
    imageView.setImageMatrix(matrix);
    return true;
   }
         
        });
    }
}

转载于:https://my.oschina.net/zhangjie830621/blog/108297

你可能感兴趣的文章
Selenium2+python自动化1-环境搭建
查看>>
机器学习十大算法之KNN(K最近邻,k-NearestNeighbor)算法
查看>>
C#基础第一天-作业
查看>>
C#自动识别文件编码
查看>>
Nginx个人简单理解
查看>>
File system needs to be upgraded. You have version null and I want version 7
查看>>
go-- 用go-mssql驱动连接sqlserver数据库
查看>>
神马玩意,EntityFramework Core 1.1又更新了?走,赶紧去围观
查看>>
南开大学2017年数学分析高等代数考研试题
查看>>
Android基础总结(六)Activity
查看>>
【WPF】BusyIndicator做Loading遮罩层
查看>>
Spring Boot Admin 的使用 2
查看>>
梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画
查看>>
常用元素的属性/方法 attr / val / html /text
查看>>
weui textarea超出字符被截断
查看>>
shell文本处理
查看>>
ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
查看>>
mongodb自动关闭:页面文件太小,无法完成操作
查看>>
【SpringBoot】SpringBoot性能优化
查看>>
JS原型继承和类式继承
查看>>